我试图从一个PHP文件替换sprintf(' href="%s%s"', ..., ...)
到它的Twig选择。我想使用Twig的插值功能,但是,字符串表达式必须用双引号括起来,并且包含围绕href属性值的嵌入式引号。如何在Twig插值中嵌入双引号?
有没有办法做到这一点?文档在这方面看起来相当轻。
{{ " href="#{value1}#{value2)"" }}
我试图从一个PHP文件替换sprintf(' href="%s%s"', ..., ...)
到它的Twig选择。我想使用Twig的插值功能,但是,字符串表达式必须用双引号括起来,并且包含围绕href属性值的嵌入式引号。如何在Twig插值中嵌入双引号?
有没有办法做到这一点?文档在这方面看起来相当轻。
{{ " href="#{value1}#{value2)"" }}
如果要包括"
你需要逃脱字符
{{ " href=\"#{value1}#{value2)\"" }}
但它不是一个好主意
一种更好的方式是直接包含在类的属性,你的价值:
<a href="{{url}}">Some link</a>
当然,你可以使用串联
<a href="{{value1~value2}}">Some link</a>
最好的解决方案是:
href="{{value1}}{{value2}}"
这样做,既value1和值2将安全有关HTML特殊字符转义。而你的双引号将直接被输出。
为什么你的方法是不好的做法:
你想要做的是什么(这两者是等价的):
{{ " href=\"#{value1}#{value2}\"" }}
或者
{{ ' href="'~value1~value2~'"' }}
做它的话,它将会退出href双引号并将它们集成到并置中。
但是由于串联在{{...}}分支中,所以也会使用HTML autoescape转义每个产生的双引号,它们将被替换为"
。
您可以禁用这个网站autoescaping这样:
{{ 'href="'~value1~value2~'"' | raw}}
但随后这是危险的,因为值1和值2不会HTML逃脱了,你会接触到XSS注射。
_最好的解决办法_然后_一些不好的做法_。人们应该首先看到并使用什么? – FirstOne
转义是不够的,因为小枝会对结果字符串执行html自动转义。 – Alsatian