我将一个变量传递给Symfony2中的twig模板,这个变量可能包含<br />
个html标签,我试图创建一个扩展(函数),但变量仍然被转义。
如何输出允许<br />
标记的树枝变量?是否有一个简单的解决方案,只允许在某些模板中使用允许标签的白名单?
我搜索过树枝沙箱,但我不确定这是否是我的解决方案。
编辑:我仍然希望对变量进行转义,但仅允许<br />
标记。
答案 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)