我想从我的博文中过滤掉外来链接,有人可以帮我正常表达吗?

时间:2010-02-05 18:13:37

标签: php regex

我有博客数据,如:

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”,但没有模式帮助。

4 个答案:

答案 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)

不应该使用正则表达式。

尝试类似DOM解析器的东西。

我不知道你是否使用PHP,但这个很容易使用:
http://simplehtmldom.sourceforge.net/

希望这有帮助。

答案 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特殊字符。