trans twig过滤器中的Symfony2 HTML

Mik*_*ail 13 translation symfony twig

我使用Symfony2.1并具有默认的config.yml

文件说:

  {# but static strings are never escaped #}
  {{ '<h3>foo</h3>'|trans }}
Run Code Online (Sandbox Code Playgroud)

但是如果我将它复制并粘贴到我的空模板中(没有任何额外的autoescapes或其他)我得到了转义字符串<h3>foo</h3>.我做错了什么?

red*_*rdo 17

尝试使用树枝原始过滤器:

{{ '<h3>foo</h3>' | trans | raw }}
Run Code Online (Sandbox Code Playgroud)

但是,raw如果您正在处理任何用户输入,请不要使用过滤器!根据Symfony的创建者的说法,它允许跨站点脚本攻击.看到这个类似的问题是一个安全但更乏味的替代方案.

  • 嗯,我只在使用占位符的翻译中使用了html,在这种情况下,根据定义,字符串不是静态的。您是对的,该文档表明此示例应在没有原始代码的情况下工作,在这种情况下,这是一个错误,除非您没有使用最新版本的Symfony,并且这是最近的更改? (2认同)
  • 并且,如果您在Twig模板中注入了一些用户数据,那么您将创建一个安全漏洞:http://blog.insight.sensiolabs.com/2013/11/28/a-new-batch-of-rules。 html。故事的寓意:不要使用`raw`! (2认同)
  • @SteveDL在我的辩护中,当我编写此答案时,OP的问题给人的印象是他们想要转换静态字符串。我不同意“从不使用原始数据”,它有它的用途。例如,我在将开始/结束锚标记插入其中的翻译中使用了它,我认为这是非常宝贵的用途,因为我们需要将标记保留在树枝文件中。不过,您是对的,我应该说“原始”的用户当心/小心。 (2认同)