从文本字符串中删除URL

时间:2011-10-14 14:24:02

标签: php regex

是否可以在PHP中搜索和删除字符串中的URL。在这里谈论实际文本而不是HTML。删除示例:

mywebsite.com
http://mywebsite.org
www.mywebsite.co.uk
www.my-web-site.net
sub.mywebsite.edu
etc

我的问题是用户提交说明字段并使用它来宣传自己的网址。我不确定它是否可能不产生太多的误报。我考虑过检测http://或www。但这并没有阻止像mywebsite.com这样的链接

3 个答案:

答案 0 :(得分:1)

这个正则表达式似乎可以解决问题:

!\b(((ht|f)tp(s?))\://)?(www.|[a-z].)[a-z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-z0-9\.\,\;\?\\'\\\\\+&%\$#\=~_\-]+))*\b!i

这是this regex from Regular Expression Library的略微修改。

我意识到它有点压倒性,但在搜索URL时会有所期待。然而,它匹配列表中的所有内容。

或者,您可以遍历说明中的每个单词,并使用parse_url()查看单词是如何分解的。我将留下确定它是否是您的网址的标准。仍然存在误报的可能性,但它们可能会大大减少。结合安德鲁关于标记可疑内容以进行审核的想法,它可能是一个可行的解决方案。

答案 1 :(得分:0)

您可以尝试查找.TLD的内容,其中TLD是任何现有的顶级域名,但这可能会导致过多的误报。

是否可以实施一个系统,其中包含可疑内容的帖子需要发布,但是其他内容会立即发布?我认为禁止此类内容是一项严格的业务要求。

就个人而言,我倾向于只是阻止任何超链接,并留在那。但是,这不是我的应用程序。

答案 2 :(得分:0)

您可以轻松使用正则表达式查找URL,然后使用PHP的函数preg_replace指定要替换它们的内容。

http://daringfireball.net/2010/07/improved_regex_for_matching_urls

编辑:由于这是用户提交的数据,您可能需要在存储“说明”字段之前进行一些验证,并检查它是否包含网址。如果是,则可以阻止用户保存表单。

为此,您可以使用preg_match,同时仍使用正则表达式查找网址。