[英]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.