【问题标题】:strip_tags: strip off the messy tags and stylesstrip_tags:去掉杂乱的标签和样式
【发布时间】:2011-10-11 03:44:03
【问题描述】:

如何去除某些 html 标签并允许其中一些标签?

例如,

我想去掉span 标签,但允许span 带有下划线。

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

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

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

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

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

【问题讨论】:

标签: php html regex preg-replace strip-tags


【解决方案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();

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 2019-07-30
      • 2011-05-04
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 2014-02-08
      相关资源
      最近更新 更多