使用PHP删除整个html链接(包括文本)

时间:2010-12-10 16:01:52

标签: php regex

我有一个文本集合,我试图用PHP动态处理(数据来自XML文件),但我想剥离一个链接和链接的文本。

PHP的strip_tags取出<a etc...></a>,但不取出之间的文字

我目前正在尝试使用正则表达式preg_replace('#(<a.*?>).*?(</a>)#', '', $content);

需要注意的另一件事是链接有样式,类,href和标题。

有谁知道解决方案?

5 个答案:

答案 0 :(得分:3)

试试这个:

$content=preg_replace('/<a[^>]*>(.*)<\/a>/iU','',$content);

答案 1 :(得分:2)

您可以使用DOMDocument,例如(未经测试!):

$doc = new DOMDocument();
$doc->loadHTMLFile('foo.php');
$domNodeList = $doc->getElementsByTagname('a'); 
$len = count($domNodeList);
for($i = 0; $i < $len; $i++) {
    $domNodeList[$i]->parentNode->removeChild($domNodeList[$i]);
}
$doc->saveHTMLFile('output.html');

或使用Simple HTML DOM Parser

$html = file_get_html('http://www.example.com/');
foreach($html->find('a') as $element) { 
   $element->outertext = '';
}
$html->save('output.html');

答案 2 :(得分:0)

由于 a -Element不是在线版,可能会破坏您的网页,因此您最好使用白名单方法,例如strip_tags()

答案 3 :(得分:0)

我使用了作为评论发布的解决方案,它们似乎效果最好,而且正是我所寻找的!

“作为参考,您已经对锚标记进行了分组,但没有对问题所在的内容进行分组.preg_replace替换了分组元素(括号中包含的元素)。您可以尝试以下方法:#(<a[^>]*?>.*?</a>)#i (我标记为不区分大小写的比较)“ - Brad Christie

“简短测试了较短的正则表达式版本,只是为了好玩:) preg_replace ('/<(?:a|\/)[^>]*>/', '', $data);” - 昨天的Cyber​​-Guard设计

答案 4 :(得分:-1)

使用正则表达式,但未经过彻底测试

echo preg_replace('#(<a.*?>)(.*?)(<\/a>)#','$2', $str);

此外,limit参数设置为-1会将其设置为无限制。