我有一个文本集合,我试图用PHP动态处理(数据来自XML文件),但我想剥离一个链接和链接的文本。
PHP的strip_tags取出<a etc...>
和</a>
,但不取出>之间的文字。
我目前正在尝试使用正则表达式preg_replace('#(<a.*?>).*?(</a>)#', '', $content);
需要注意的另一件事是链接有样式,类,href和标题。
有谁知道解决方案?
答案 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');
$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会将其设置为无限制。