PHP 8.3 语法变化 - highlight_file 和highlight_string output HTML 变化

作者: 温新

图书: 【PHP 8.3 新特性】

阅读: 610

时间: 2024-11-19 23:28:19

hi,我是温新,一名 PHPer

PHP的 highlight_filehighlight_string 函数为 PHP 提供语法高亮支持。它们接受一个包含 PHP 代码的文件或字符串,并返回一个带有 PHP 关键字、函数和其他标记的高亮的 HTML 片段。语法高亮的颜色的配置通过 PHP INI 指令完成。

PHP 8.3 对语法高亮器进行了一些更改,导致结果 HTML 输出发生变化。

<?php
    
function hello(): void {
    echo "Hello World";
}

hello();
echo highlight_string(string: $code, return: true);

PHP 8.3 对语法高亮器如何处理空白字符进行了一些更改,现在将输出用 <pre></pre> HTML标签包裹。此外,它不再将换行符转换为HTML <br />标签,导致多行的高亮 HTML 输出。

以下是上述 PHP 代码片段在 PHP 版本之前和 PHP 8.3 上的 HTML 输出的差异。

<pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
 </span><span style="color: #007700">function </span><span style="color: #0000BB">hello</span><span style="color: #007700">(): </span><span style="color: #0000BB">void </span><span style="color: #007700">{
    echo </span><span style="color: #DD0000">"Hello World"</span><span style="color: #007700">;
 }
 
 </span><span style="color: #0000BB">hello</span><span style="color: #007700">();</span></code></pre>

细节变化

在 PHP 8.3 中,PHP 的内置语法高亮器有三大主要变化:

  • 输出现在被包裹在 <pre><code></code></pre>
  • 换行符不再转换为 <br /> 标签
  • 空格和制表符不再转换为 HTML 实体

标签包裹<pre><code></code></pre>

在PHP 8.3及更高版本中,highlight_file 和 highlight_string 的在 PHP 8.3 及更高版本中,highlight_file 和 highlight_string 的输出被包裹在<pre><code></code></pre> 标签中。它还删除了先前 PHP 版本的最外层 <span> 标签,并在 <code> 标签中添加了 style="color: 属性。

highlight_string('');
 <pre><code style="color: #000000"></code></pre>

默认情况下,HTML pre 元素是块元素,这意味着对内联代码片段使用 highlight_string/file 可能会导致 HTML 输出中断,除非将样式 pre 设置为内联(例如,在标记中 p )。

换行符不再转换为 br 标签

PHP 8.3 的 highlight_file 和 highlight_string 函数输出不再将换行符(\n)转换为HTML br 标签.这意味着原始代码片段中的换行符将被保留。

echo "Hello";
echo "World";
echo highlight_string(string: $code, return: true);
<pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
 </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hello"</span><span style="color: #007700">;
 echo </span><span style="color: #DD0000">"World"</span><span style="color: #007700">;</span></code></pre>

白色空格和制表符不再转换为 HTML 实体

在 PHP 8.3 之前, highlighter 将空格字符转换为   HTML 实体,将制表符(\t)字符转换为四个空格作为 HTML 实体 (&nbsp;&nbsp;&nbsp;&nbsp;)。在 PHP 8.3 及更高版本中,空格字符根本不会改变,制表符会转换为四个标准空格字符。

请登录后再评论