Twig 在类似细枝的striptag中使用函数,但我想将标签列入黑名单,而不是白名单标签

Twig 在类似细枝的striptag中使用函数,但我想将标签列入黑名单,而不是白名单标签,twig,Twig,假设我有一个用户可以填写的文本字段。 我想去掉twig中的元素。我该怎么做 我可以用 {{ some_html|striptags('<a>') }} {{some_html | striptags('')} 这将允许/保留元素。但是如果我只想删除一个元素怎么办?你确定使用黑名单而不是白名单是个好主意吗 如果是,可以轻松创建自定义细枝过滤器,并将其用作参考: $twig->addFilter(new Twig_Filter('removetags', function($h

假设我有一个用户可以填写的文本字段。 我想去掉twig中的
元素。我该怎么做

我可以用

{{ 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?