2

如何剥离某些 html 标签并允许其中一些标签?

例如,

我想剥离span标签,但允许span带下划线。

<span style="text-decoration: underline;">Text</span>

我想允许p,但我想删除p例如里面的任何样式或类,

<p class="99light">Text</p>应该删除 p 标签内的类 - 我只想要一个干净的p标签。

这是我到目前为止的线路,

strip_tags($content, '<p><a><br><em><strong><ul><li>');
4

2 回答 2

1

你不能。您需要使用 XML/HTML 解析器来执行此操作:

// with DOMDocument it might look something like this.
$dom = new DOMDocument();
$dom->loadHTML( $content );
foreach( $dom->getElementsByTagName( "p" ) as $p )
{
    // removes all attributes from a p tag.
    /*
    foreach( $p->attributes as $attrib )
    {
        $p->removeAttributeNode( $attrib );
    }
    */
    // remove only the style attribute.
    $p->removeAttributeNode( $p->getAttributeNode( "style" ) );
}
echo $dom->saveHTML();
于 2011-07-22T15:24:13.737 回答
0

您需要完整的 DOM 解析。strip_tags不会提供必要的安全性和定制。我过去曾为此使用过HTMLPurifier库。它进行实际解析并允许您设置白名单,同时处理恶意输入并生成有效标记!

“必要的安全性”是指如果您尝试编写自定义解析器,您会犯错误(别担心,我也会),而“自定义”是指没有内置解决方案可以让您仅针对某些标签具有某些属性和这些属性的值。HTMLPurifier 是 PHP 库解决方案。

于 2011-07-22T15:22:20.300 回答