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

Gaz*_*ter 1 php interpolation symfony twig

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

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

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

Als*_*ian 5

最好的解决方案是:

href="{{value1}}{{value2}}"
Run Code Online (Sandbox Code Playgroud)

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

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

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

{{ " href=\"#{value1}#{value2}\"" }}
Run Code Online (Sandbox Code Playgroud)

要么

{{ ' href="'~value1~value2~'"' }}
Run Code Online (Sandbox Code Playgroud)

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

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

你可以禁用这个html autoescaping,这样:

{{ 'href="'~value1~value2~'"' | raw}}
Run Code Online (Sandbox Code Playgroud)

但是它很危险,因为value1和value2将不再被html转义,并且你将接触到XSS注射.


Mat*_*ron 5

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

{{ " href=\"#{value1}#{value2)\"" }}
Run Code Online (Sandbox Code Playgroud)

但这不是一个好主意

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

<a href="{{url}}">Some link</a>
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用连接

<a href="{{value1~value2}}">Some link</a>
Run Code Online (Sandbox Code Playgroud)