如何在Twig插值中嵌入双引号?

时间:2016-07-27 14:11:24

标签: php symfony twig interpolation

我正在尝试将sprintf(' href="%s%s"', ..., ...)从PHP文件替换为其Twig替代方案。我想使用Twig的插值功能,但是字符串表达式必须用双引号括起来,并且包含围绕href属性值的嵌入式引号。

有办法做到这一点吗?在这方面,文档似乎相当轻。

{{ " href="#{value1}#{value2)"" }}

2 个答案:

答案 0 :(得分:5)

最佳解决方案是:

href="{{value1}}{{value2}}"

这样做,对于HTML特殊字符,value1和value2都将被安全地转义。你的双引号将直接输出。

为什么你的方法是不好的做法:

你想要做的是(这两个是等价的):

{{ " href=\"#{value1}#{value2}\"" }}

或者

{{ ' href="'~value1~value2~'"' }}

这样做,它将转义href双引号并将它们集成到串联中。

但是由于连接在{{...}}中,twig也会使用HTML自动视图转义每个产生的双引号,它们将被替换为"

你可以禁用这个html自动加载:

{{ 'href="'~value1~value2~'"' | raw}}

但是这很危险,因为value1和value2将不再被html转义,并且您将接受XSS注射。

答案 1 :(得分:5)

如果你想要包含",你需要逃避角色

{{ " href=\"#{value1}#{value2)\"" }}

但这不是一个好主意

更好的方法是将您的值直接包含在属性中:

<a href="{{url}}">Some link</a>

当然,您可以使用连接

<a href="{{value1~value2}}">Some link</a>