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

3

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

有没有办法做到这一点?文档在这方面似乎非常简略。

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


仅仅进行转义是不够的,因为Twig会对结果字符串进行HTML自动转义。 - Alsatian
2个回答

6

最佳解决方案是:

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

这样做,无论是value1还是value2都将安全地转义HTML特殊字符。而且你的双引号将直接被输出。

为什么你的方法是不好的实践:

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

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

或者

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

这样做,它会转义 href 的双引号并将其整合到拼接中。
但由于拼接在 {{ ... }} 中,twig也会使用HTML自动转义来转义每个结果中的双引号,它们将被替换为"
您可以禁用此HTML自动转义:
{{ 'href="'~value1~value2~'"' | raw}}

但是这种方法存在危险,因为value1和value2将不再进行html转义,您会面临XSS攻击的风险。


1
最佳解决方案是什么?人们应该首先看到和使用什么?一些不良做法。 - FirstOne

6
如果你想在文本中包含"字符,你需要对该字符进行转义处理。
{{ " href=\"#{value1}#{value2)\"" }}

但这不是一个好主意

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

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

当然,您可以使用连接操作。
<a href="{{value1~value2}}">Some link</a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接