【问题标题】:PHP: show HTML commentsPHP:显示 HTML 注释
【发布时间】:2022-01-04 14:38:20
【问题描述】:

考虑以下 PHP 函数:

function show_html_comment($comment)
{
   echo '<!-- ' . $comment . ' -->';
}

此函数显示 HTML cmets。

但是如果$comment 里面有一个 HTML 注释呢?

$comment = '<!-- foo -->';

函数的结果是:

<!-- <!-- foo --> -->

我不希望那样。我也不应该显示字符串的修改版本(例如使用 htmlspecialchars())。我必须在 HTML 注释中显示字符串。

谁能提出解决方案?

【问题讨论】:

  • htmlspecialchars() 例如:echo '&lt;!-- ' . htmlspecialchars($comment, ENT_QUOTES) . ' --&gt;';
  • 我无法显示修改后的字符串。所以我想到了这个解决方案:插入特殊字符。例如:--[SPECIAL CHAR HERE]> 因此浏览器不会检测到它是注释结束标记。但我必须测试它。
  • 请在更新的问题描述中显示您的“修改后的字符串”
  • 我能想到的另一个解决方案是将 替换为 [!-- --] 或类似的 Unicode 字符,这可能是一个可以接受的解决方案。

标签: php html comments


【解决方案1】:

您可以使用htmlspecialchars 作为评论中提到的@vee,或者如果您非常确定字符串的结构,您可以使用str_replace,例如:

function show_html_comment($comment)
{
    $comment = str_replace('<!--', '', $comment);
    $comment = str_replace('-->', '', $comment);
    echo '<!-- ' . trim($comment) . ' -->';
}

show_html_comment('<!-- foo -->'); // <!--  foo  -->

【讨论】:

  • 感谢@Simone 的回答,但我无法删除评论开始/结束标记。
  • @richirm 然后将&lt;! 替换为! 并将&gt; 替换为空。或者 &lt;!-[!--&gt;-],正如你评论的那样。
【解决方案2】:

我在这里发布我所调查的内容:

最初的解决方案可能是将 标记替换为 [!-- --] 或 {!-- --} 或类似的东西。

另一种可能的解决方案是在标记内插入空格。

另一种解决方案是用相似的 Unicode 字符替换标记中的某些字符。例如,使用连字符 U+2010 代替字符 U+002D,或将 字符替换为类似字符。例如,您可以将 cmets 设置为:

以下是我目前发现的类似字符:

‹ ›
≺ ≻
<>

另一种解决方案是在标记内插入不可见字符以“破坏标记”,以便浏览器不会将它们检测为 HTML cmets。例如,我想到使用字符 U+200E。

例如:

如果您运行以下代码,您将在另一个 HTML 注释中拥有一个带有 HTML 注释的文件,并且浏览器不会检测到它:

file_put_contents('test.html', '<!DOCTYPE html><html><body><!-- <' . "\u{200e}" . '!-- foo --' . "\u{200e}" . '> --></body></html>');

【讨论】:

    猜你喜欢
    • 2011-05-13
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2015-08-07
    • 2011-08-12
    • 2010-11-22
    • 2014-02-12
    相关资源
    最近更新 更多