2011-10-14 196 views
2

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

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

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

+0

请参阅http://stackoverflow.com/questions/910912/extract-urls-from-text-in-php。此链接可能无法解决您的问题,但有些信息可能会对您有所帮助。 – Herbert

+0

查找网址(无论是编码为www dot dot dot com还是其他任何方式)的最有效方法是使用人眼和大脑 - 如果可能的话,请使用社区。 –

回答

0

你可以尝试的东西,看起来对.TLD,其中TLD是任何现有的顶级域名的链接,但是这可能会导致太多的误报。

才有可能实现一个系统,需要含有可疑内容的帖子被张贴中庸,但其他人发布的时候了?我假设禁止这种类型的内容是一项坚定的业务要求。

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

+0

我会这么做 - 但是扩展一下,所以在找到匹配的顶级域名后,我会稍微往后退一点,检查字符串,直到找到一个非url字符(比如空格,换行符等)。虽然这并不能阻止人们做他们所做的事情“example [dot] c0m” – 2011-10-14 14:33:22

+0

超链接已经被阻止,但用户刚刚转向了创建文本链接。我认识到,我永远不能停止最坚定的链接器(例如[dot] c0m),但想停止这个随便的例子。com – Alex

+2

另一种选择(取决于您的主要用户群以及他们的活动和合作水平)是一个标志/投票下来按钮,它可以获得主持人的注意,或者在许多投票后隐藏/删除评论(或两者兼而有之!尽管这可能需要更多的努力来实现,显然) –

0

您可以轻松地使用正则表达式找到的网址,然后指定如何处理使用PHP的功能preg_replace替换它们。

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

编辑:因为这是用户提交的数据,你可能希望你存储的“描述”字段前做一些验证,并检查它是否包含一个URL。如果是这样,您可以阻止用户保存表单。

对于这一点,你可以同时仍使用正则表达式找到一个URL中使用preg_match

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()看到这个词如何分解。我’会留下判断它是否为您的网址的标准。有’仍然有误报的可能性,但可能会大大降低。结合安德鲁’的标记有问题的内容以适度的想法,它可能是一个可行的解决方案。

+0

'.travel' TLD如何? –

+0

@Code Jockey:将它添加到管道列表'(com | edu | gov | ... | ca | uk | travel)' – Herbert

+1

这也不会过滤掉很多URL缩写(bit.ly ,goo.gl等...) –