PHP 8.3 语法变化 - highlight_file 和highlight_string output HTML 变化
hi,我是温新,一名 PHPer
PHP的 highlight_file
和 highlight_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"><?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"><?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 实体 (
)。在 PHP 8.3 及更高版本中,空格字符根本不会改变,制表符会转换为四个标准空格字符。