花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 11|回复: 0

PHP:高亮PHP代码

[复制链接]
  • TA的每日心情
    奋斗
    2026-4-13 13:26
  • 签到天数: 1788 天

    [LV.Master]伴坛终老

    3183

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2026-4-13 13:29 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    PHP 有一个 highlight_string() 函数,它可以将结构完整的 PHP 代码高亮显示。

    所谓完整结构的 PHP 代码,有三种写法:

    标准起始符:

    <?php
    echo "Hello PHP!";
    ?>

    或者使用短输出起始标记符:

    <?=
    print "Hello PHP!";
    ?>

    或者简化的短标记起始符(过去常用,现在不推荐):

    <?
    echo "Hello PHP!";
    ?>

    待处理的文本如果是上述结构的内容,可能会引发PHP代码的执行,也可能因种种原因导致程序出错或结果不符合预期。如果是为了渲染 PHP 代码,那么,可以用 nowdoc 对代码略作封装,然后用文章开头提到的 highlight_string() 函数令其高亮显示:

    // 封装字符串
    $mystr = <<<'EOT'
    <?php
    function addTwoNumbers($a, $b) {
      $a = intval($a);
      $b = intval($b);
      return $a + $b;
    }
    echo "201 + 26 = " . addTwoNumbers(201, 26);
    ?>
    EOT;
    echo highlight_string($mystr, true); // 渲染字符串

    代码中,$mystr 是一个完整结构的 PHP 代码,里面有一个求两数之和的函数,函数被调用来求 210 和 26 两个数之和并输出计算结果。$mystr 使用了 nowdoc 结构进行封装,这样就可以原原本本地在里面书写PHP代码,不用担心字符串引号嵌套问题,也不用担心变量会被解析,界定符 <<<'EOT'EOT之间所包裹的内容均被视为纯粹的字符串。

    而最后一句代码调用了 highlight_string() 函数高亮显示 $mystr 封装的字符串。该函数的第二个参数是布尔值,为 true 时表示俘获高亮内容。效果如下:

    <?php
    function  addTwoNumbers ( $a $b ) {
      
    $a  intval ( $a );
      
    $b  intval ( $b );
      return 
    $a  $b ;
    }

    echo 
    "201 + 26 = "  addTwoNumbers ( 201 26 );
    ?>

    至于 nowdoc 结构,分界附 <<< 之后紧跟一个可以自定义的名称并在被封装的字符串结束后另起一行顶格以相同名称收尾,名称起始时需要引号、收尾时不要引号:

    <<<'EOF'

    // 这里是PHP相关的代码

    EOF

    PHP 中,nowdoc 类似于 HTML 中的 pre 标签,但也不是非用不可。假如我们需要动态处理混合有其它代码和完整PHP结构代码的长文本字符串,我们可以无需使用 nowdoc 结构去重新构造字符串,可以使用正则表达式去匹配完整结构的 PHP 代码,匹配到的高亮显示、其余代码保留原样。试看:

    // 高亮混合字串中的PHP代码
    function highlightPhpCode($text) {
        return preg_replace_callback(
            '/(<\?(?:php|=)?.*?\?>)/s',
            function($matches) {
                return highlight_string($matches[0], true);
            },
            $text
        );
    }

    调用上述函数,完整结构的 PHP 代码会高亮输出,其余代码该干嘛干嘛。

    ——以上内容来源于对PHP文本库整站系统适应性修改、对hblog和x-diary开发过程的体会。

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2026-4-13 17:28 , Processed in 0.067192 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表