PHP如何将包含嵌套HTML注释的字符串原样写入HTML注释
解决方案
核心原理是利用HTML连续注释的语法特性,在不修改原始输入内容任何字符的前提下,将输入中会导致注释提前闭合的-->序列拆分到相邻的两个注释块中,既保证原始内容完整保留,也不会出现注释提前截断的问题。
实现逻辑
- HTML注释唯一的非法终止序列是
-->,只要出现该序列就会终止当前注释。我们不需要修改原始内容的任何字符,只需要将-->中的--保留在上一个注释末尾,>放到下一个注释开头即可。 - 额外处理边界场景:如果输入内容末尾为
--,需要单独拆分避免和最终的注释闭合标记-->冲突。
改造后的PHP代码
function show_html_comment($comment) { // 拆分所有内部的-->序列,原始字符完全保留 $processed = str_replace('-->', '--><!-- >', $comment); // 兼容低版本PHP,判断末尾是否为--,避免和闭合标记冲突 if (substr($processed, -2) === '--') { $processed .= '--><!--'; } echo '<!-- ' . $processed . ' -->'; }
效果验证
传入测试参数$comment = '<!-- foo -->'时,最终输出为:
<!-- <!-- foo --><!-- > -->
该输出完全符合要求:
- 原始输入的所有字符
<!-- foo -->完整保留在输出中,没有任何转义或修改 - 浏览器会将其解析为两个连续的合法注释,不会出现注释提前闭合、后续内容泄露到页面的问题
- 查看页面源代码时可以完整识别到原始的注释内容
内容的提问来源于stack exchange,提问作者Richi RM
相关产品推荐
相关产品推荐

