在PHP中如何正确显示特殊字符“-->” 避免被识别为HTML注释?
第三方数据含
-->导致HTML注释逃逸问题解决方法 - 优先使用官方内置转义能力
你当前用的Laravel Blade模板默认的{{ }}语法会自动调用htmlspecialchars转义HTML特殊字符,正常会将>转义为>,打断-->的连续序列。如果该规则失效,可手动强制指定转义规则,代码修改为:
@foreach ($bus['bus_infos2'] as $bus) <li>{{ htmlspecialchars($bus->name, ENT_QUOTES) }}</li> @endforeach
ENT_QUOTES参数会同时转义单双引号,覆盖所有常见HTML特殊字符场景。
- 不可转义特殊字符场景的兼容方案
如果业务要求必须保留原始字符的显示格式,不能做全局HTML转义,可以针对风险序列做定向替换:- 替换
-->为-->,仅转义序列末尾的大于号,不影响其他内容显示 - 或者在
--和>之间插入零宽空格(​),替换为--​>,既可以打断HTML解析器识别的注释闭合序列,用户肉眼也看不到额外字符
对应代码示例:
- 替换
{{ str_replace('-->', '--​>', $bus->name) }}
- 规避高风险输出场景
不要将不可信的第三方原始数据输出到HTML注释块(<!-- 内容 -->)内部,HTML解析器会优先按原始字符流匹配注释闭合标记,即使做了实体转义也存在逃逸风险。如果必须放入注释块,需提前过滤所有--和<、>字符。
内容的提问来源于stack exchange,提问作者SB Lee
相关产品推荐
相关产品推荐

