PhP strip_tags:如何删除包含特定属性的标记

时间:2013-12-08 02:18:15

标签: php regex strip-tags

我想从我的wordpress Feed中删除标签,但保留段落。

strip_tags($content, '<p>' );

这很好但我不想保留处理图片标题的段落......它们看起来像这样:

<p class="wp-caption-text">blah blah blah</p>

那么,我如何剥离持有的标签,比如类属性?

非常感谢。

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用DOM解析库。 DOMDocument内置于PHP中,非常适合DOM操作。 DOMXPath有助于查询。

$dom = new DOMDocument;
$dom->loadHTML($yourHTML);
$xpath = new DOMXPath($dom);
foreach ($xpath->query("//*[not(p)]|.wp-caption-text") as $node) {
    $node->parentNode->removeChild($node);
}

请注意,这也适用于strip_tags

的工作

答案 1 :(得分:1)

编辑:这实际上并不是OP想要的解决方案,但是回答了被问到的问题。


不幸的是,你不能直接用strip_tags做这件事。

你可以使用DOMDocument,然后使用strip_tags:

$DOM = new DOMDocument();
$DOM->loadHTML($content);
foreach($DOM->getElementsByTagName("p") as $p)
{
    foreach($p->attributes as $attr)
        $p->removeAttributeNode($attr);
}
$content = $DOM->saveHTML();

//Uncommenting this will then remove the tag as well.
//$content = strip_tags($content, 'p');