Twig 在类似细枝的striptag中使用函数,但我想将标签列入黑名单,而不是白名单标签
假设我有一个用户可以填写的文本字段。 我想去掉twig中的Twig 在类似细枝的striptag中使用函数,但我想将标签列入黑名单,而不是白名单标签,twig,Twig,假设我有一个用户可以填写的文本字段。 我想去掉twig中的元素。我该怎么做 我可以用 {{ some_html|striptags('<a>') }} {{some_html | striptags('')} 这将允许/保留元素。但是如果我只想删除一个元素怎么办?你确定使用黑名单而不是白名单是个好主意吗 如果是,可以轻松创建自定义细枝过滤器,并将其用作参考: $twig->addFilter(new Twig_Filter('removetags', function($h
元素。我该怎么做
我可以用
{{ some_html|striptags('<a>') }}
{{some_html | striptags('')}
这将允许/保留
元素。但是如果我只想删除一个
元素怎么办?你确定使用黑名单而不是白名单是个好主意吗
如果是,可以轻松创建自定义细枝过滤器,并将其用作参考:
$twig->addFilter(new Twig_Filter('removetags', function($html, ...$tags) {
$dom = new DOMDocument();
$dom->loadHTML('<body>' . $html . '</body>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
foreach ($tags as $tag) {
$elements = iterator_to_array($dom->getElementsByTagName($tag));
foreach ($elements as $el) {
$el->parentNode->removeChild($el);
}
}
return str_replace(['<body>', '</body>'], '', $dom->saveHTML());
}));
$twig->addFilter(新的twig_过滤器('removetags',函数($html,…$tags){
$dom=新的DOMDocument();
$dom->loadHTML('.$html'',LIBXML_html_noimpled | LIBXML_html_NODEFDTD);
foreach($tags作为$tag){
$elements=iterator_to_数组($dom->getElementsByTagName($tag));
foreach($el形式的元素){
$el->parentNode->removeChild($el);
}
}
返回str_replace(['','',''$dom->saveHTML());
}));
然后在细枝上:
{% set html = 'hello <a href="#">world</a>, <em>how</em> <a>are</a> you?' %}
{{ html|raw }}
{{ html|removetags('a')|raw }}
{{ html|removetags('em')|raw }}
{{ html|removetags('a', 'em')|raw }}
{%set html='你好,怎么,怎么
我使用了LIBXML\u HTML\u NOIMPLIED | LIBXML\u HTML\u NODEFDTD
,因为否则您会在输出中得到
和其他额外的标记。有关详细信息
我将加载的HTML包装到
标记中,然后将其删除。否则,您将在输出中获得一个额外的
元素,或者输出可能会以其他方式被破坏。很荣幸。(使用
标记对我不起作用,所以我使用了
标记。)
U需要使用twig\U函数扩展twig
,就像是的,我确定我想加入黑名单。我已经从cms获得了安全输出。我只想删除元素。我可以看到twig中已经没有简单的函数。所以我接受这个答案。这很清楚,并告诉我(和其他人)如何做到这一点。
hello <a href="#">world</a>, <em>how</em> <a>are</a> you?
hello , <em>how</em> you?
hello <a href="#">world</a>, <a>are</a> you?
hello , you?