PHP DOM删除标记(不是内容)

时间:2012-04-04 00:02:16

标签: php dom domdocument

$mystring="This is mystring. <a href='http://www.google.com'>Google.</a>"; 
$dom = new DOMDocument; 
$dom->loadHTML($mystring); 
$xPath = new DOMXPath($dom); 
$nodes = $xPath->query('//a');
if($nodes->item(0)) { 
    $nodes->item(0)->parentNode->removeChild($nodes->item(0)); 
} 
echo $dom->saveHTML();  

我想获得输出:

  

这是神秘的。谷歌。

但我得到了:

  

这是神秘的。

3 个答案:

答案 0 :(得分:4)

尝试以下方法:

if($nodes->item(0)) {
    $node = $nodes->item(0);
    $node->parentNode->replaceChild(new DOMText($node->textContent), $node); 
} 

答案 1 :(得分:-1)

或者,使用简单的技巧来做简单的事情。

这是strip_tags()

的替代方法
preg_replace('#<a.*?>(.*?)</a>#i', '\1', $text)

答案 2 :(得分:-2)

“Google”是您要删除的节点的子节点。所以这种行为是预期的。我想你想要的是使用PHP的strip_tags函数。

echo strip_tags("This is mystring. <a href='http://www.google.com'>Google.</a>");