删除不允许href的链接

时间:2012-04-18 18:29:32

标签: php regex dom

我有这样的链接:

<a href="http://illegallink.com"><img src="something.jpg" /><a href="http://legallink.com">legal</a></a>

我想删除所有中包含“legallink.com”的链接。但仍然保留内容。所以上面的输入会输出:

<img src="something.jpg" /><a href="http://legallink.com">legal</a>

它应该通过链接递归工作。

我发现此正则表达式删除了所有链接:/<\\/?a(\\s+.*?>|>)/,但我希望它保留href为legallink.com的链接。

这可以用正则表达式完成吗?或者我应该使用DOM解析器吗?

1 个答案:

答案 0 :(得分:1)

error_reporting(~0); display_errors(1);

$code = '<a href="http://illegallink.com"><img src="something.jpg" /><a href="http://legallink.com">legal</a></a>';

$document = new DOMDocument(); 
$document->loadHTML($code); 
$parser = new DOMXPath($document);  

foreach($parser->query("//a") as $node)  
{ 
  if (!preg_match("/^http:\/\/legallink.com/i", $node->getAttribute("href")))
  {
    $node->parentNode->replaceChild($node->nodeValue, $node);
  }
}
echo $document->saveXML();