我有这样的链接:
<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解析器吗?
答案 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();