繁体   English   中英

PHP:显示 HTML 评论

[英]PHP: show HTML comments

考虑以下 PHP function:

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

此 function 显示 HTML 注释。

但是如果在$comment里面有一个 HTML 评论呢?

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

function 的结果将是:

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

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

任何人都可以提出解决方案吗?

您可以使用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  -->

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

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

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

另一种解决方案可能是用类似的 Unicode 字符替换令牌中的某些字符。 例如,使用连字符 U+2010 代替字符 U+002D,或将 < > 字符替换为类似字符。 例如,您可以发表如下评论:

< !-- ≺!-- ≺!-- foo --≻ --≻ -->

以下是我迄今为止发现的类似字符:

‹ ›
≺ ≻
<>

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

例如:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM