我有博客数据,如:
This is foreign <a href="xyz.com">link</a>, this is my site's <a href="mysite.com">link</a> and so on.
我想做的是过滤外国网站的链接,即“<a href="xyz.com">link</a>
”。所以我的最终输出是:
This is foreign link, this is my site's <a href="mysite.com">link</a> and so on.
我试过“preg_replace”,但没有模式帮助。
答案 0 :(得分:2)
首先,我必须同意那些已经说过正则表达式不适合HTML的人。
那就是说,如果你想要做的事情并不比替换
的任何事件更复杂<a href="something.tld">foo</a>
与
foo
如果something.tld不是您的域名,那么这应该可以解决问题
preg_replace( '/<a href="http:\/\/(?!mysite.com)(.*?)>(.*?)<\/a>/',
'$2',
$mystring );
其中$ mystring显然是您要修改的字符串。然而,这使用正则表达式的外观,这是一个非常好的赠品,这不是用正则表达式完成的。
HTH
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以使用DOMDocument查找所有链接元素,只需更新源代码即可。我写了一个关于如何use DOMDocument to find all links的小例子。我使用这种方法来重写我曾经做过的一些项目中的链接。我确信如果网址与您的主机不匹配,进一步删除标记并将其替换为文本将不会花费太多精力。
答案 3 :(得分:0)
我强烈建议您使用http://htmlpurifier.org/,这不仅可以轻松编写链接过滤器(http://htmlpurifier.org/docs/enduser-uri-filter.html),还可以保护您免受XSS攻击。如果您没有使用列入白名单的HTML解析器,则需要将用户提供的数据视为文字和转义html特殊字符。