symfony2 twig whitelist html标签

时间:2011-11-03 19:22:12

标签: html templates escaping symfony twig

我将一个变量传递给Symfony2中的twig模板,这个变量可能包含<br />个html标签,我试图创建一个扩展(函数),但变量仍然被转义。

如何输出允许<br />标记的树枝变量?是否有一个简单的解决方案,只允许在某些模板中使用允许标签的白名单?

我搜索过树枝沙箱,但我不确定这是否是我的解决方案。

编辑:我仍然希望对变量进行转义,但仅允许<br />标记。

5 个答案:

答案 0 :(得分:37)

实际上,您可以通过以下方式使用本机PHP函数strip_tags:

{{ var|striptags('<br>')|raw }}

您可以使用以下代码允许多个代码:

{{ var|striptags('<br><p>')|raw }}

答案 1 :(得分:3)

你可以这样做:

{{ text | striptags('<p><b><br') | raw }}

例如,

<br>

不会逃脱

<br> and <br />

<p>

不会逃脱

<p> and </p>

答案 2 :(得分:0)

最初我认为应该可以编写自定义的escaper策略,这样你就可以做到这样的事情:

{{ var|escape('html-custom') }}

不幸的是情况并非如此。只有可用的策略是html和js。它们在twig_escape_filter()类文件中定义的Twig_Extension_Core函数中进行了硬编码。

似乎您唯一的选择是使用新过滤器编写自定义扩展名:

{{ var|raw|customescape }}

以下是自定义树枝扩展的示例以及如何在Symfony中注册它:Symfony2 Twig extension

答案 3 :(得分:0)

{{ var|striptags('<br>')|raw }} 

工作正常,但我不知道如何使用此树枝过滤器将数组传递给strip_tags php函数。

两个

{{ var|striptags(['<br>', '<b>'])|raw }}

{% set allow = ['<br>', '<b>'] %}
{{ var|striptags(allow)|raw }}

在渲染模板期间抛出“数组到字符串转换”异常。

还要小心,strip_tags php函数不会像“onclick”那样转义html属性。

答案 4 :(得分:0)

{{ var|nl2br }}

和/或

{{ var|raw|nl2br }}

nl2br reference