如何避免HTML标签转义以标记形式显示?PHP+Twig渲染问题求助
解决Twig渲染HTML标签被转义的问题
嘿,这个问题我太清楚啦!你遇到的是Twig默认的自动转义机制在搞事情——为了防范XSS攻击,Twig会自动把变量里的HTML特殊字符(比如<、>)转成实体字符(<、>),所以你的<b>标签就变成纯文本显示了,没法生效成加粗样式。
给你几个靠谱的解决方案,按需选就行:
单次渲染时关闭转义:直接在模板里给变量加上
|raw过滤器,写法变成:{{ var|raw }}这样Twig就会跳过对这个变量的转义,直接输出原始HTML,你就能看到
#Something#的加粗效果了。提前标记变量为安全HTML:如果这个变量在整个项目里都不需要转义,你可以在PHP里用Twig的
Markup类包装它:use Twig\Markup; $var = new Markup("<b>#Something#</b>", 'UTF-8');之后在模板里用
{{ var }}渲染时,Twig会识别这是安全的HTML内容,不会进行转义。局部关闭模板的自动转义(不推荐除非你完全信任内容):如果有一大块内容都不需要转义,可以用
autoescape标签包裹:{% autoescape false %} {{ var }} {# 这里其他不需要转义的内容 #} {% endautoescape %}注意:这种方式风险较高,如果内容里包含用户输入的部分,很容易引发XSS漏洞,所以优先用前两种精准控制的方式。
最后提醒一句:如果$var里的内容包含用户输入的部分,一定要先做好过滤和验证,确保没有恶意代码,再使用上述方法关闭转义,安全第一哦!
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

