我正在使用树枝1.12.2。我的代码从代码隐藏生成一些元素,当使用最新版本的twig渲染这些元素时,它们会被html编码
{% for item in files_folders %}
<tr class="{{ cycle(['tr_odd', 'tr_even'], loop.index) }}">
<td><img src="../templates/images/sharepoint/{{ item.ContentType }}.gif" border="0" alt=""/></td>
<td>{{ item.Link }}</td>
<td>{{ item.Modified }}</td>
<td>{{ item.FileSize }}</td>
<td>{{ item.FileType }}</td>
</tr>
{% endfor %}
这将输出此
<tr class="tr_even">
<td><img src="../templates/images/sharepoint/Document.gif" border="0" alt=""/></td>
<td><a href='?download=/ddd.png'>ddd.png</a></td>
<td>2013-03-04 17:47:38</td>
<td>64.8 KB</td>
<td>png</td>
</tr>
<tr class="tr_odd">
<td><img src="../templates/images/sharepoint/Document.gif" border="0" alt=""/></td>
<td><a href='?download=/asdasd.png'>asdasd.png</a></td>
<td>2013-03-03 20:01:52</td>
<td>66.04 KB</td>
<td>png</td>
</tr>
当我调试并在将数据发送到twig之前查看数据时,它不会被转义。我没有找到{{item.Link}}的任何替代方法来按原样呈现数据。
由于
答案 0 :(得分:49)
您可以使用raw
过滤器制作twig render raw html
http://twig.sensiolabs.org/doc/filters/raw.html
{% autoescape %}
{{ var|raw }} {# var won't be escaped #}
{% endautoescape %}
答案 1 :(得分:14)
使用| raw时应该小心。说数据是安全的,意味着你100%信任它。
我个人建议使用自定义树枝过滤器:
class CustomExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('unescape', array($this, 'unescape')),
);
}
public function unescape($value)
{
return html_entity_decode($value);
}
}
将以下内容添加到services.yml(或者转换为xml)。
services:
ha.twig.custom_extension:
class: HA\SiteBundle\Twig\CustomExtension
tags:
- { name: twig.extension }
答案 2 :(得分:6)
或http://twig.sensiolabs.org/doc/filters/raw.html
{% autoescape false %}
{{ your_item }}{# your_item won't be escaped #}
{% endautoescape %}
答案 3 :(得分:1)
如果您使用的是Drupal 8,则raw
或autoscape
均不起作用,这可能是由于您要打印的变量(如果它是带有保持安全输出的模板的渲染数组)而导致的(例如,hl2br
过滤器)。
在这种情况下,您将需要通过渲染数组访问值并对其进行过滤,例如:
{% autoescape false %}
{{ item.content['#context']['value'] }}
{% endautoescape %}