以纯文本格式识别URL

问题描述:

这应该很简单,但我不确定如何最好地解决它。我有一个WinForms应用程序,用户可以输入较长的描述。偶尔,他们会输入网址,RichTextBox会识别它们并在显示时使它们可点击。以纯文本格式识别URL

我正在将应用程序移到网上,而且我不确定如何使这些相同的URL可点击。是否有一些半自动的方式将“http://www.google.com”或“www.google.com”转换为可点击的链接?我必须诉诸RegEx匹配吗?

这实际上是一个非常困难的问题。你可以用正则表达式来接近但不完美。有潜在的正则表达式模式的一个非常好的击穿这里要考虑:http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/

最后一个,他列出好像它可能对于大多数来说已经足够好:

\b(?:(?:https?|ftp|file)://|www\.|ftp\.) 
    (?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])* 
    (?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$]) 

当心。如果用户生成的可点击网址对其他用户可见,则会引发跨站脚本攻击等新问题。另外,您可能需要清理URL。例如,网址中可能有一个&符号,但您需要将其转义。

所以,实际上有两个步骤。 1.找到网址。 2.使网址可点击。

步骤2可能比较困难。

另外,要小心诸如圆括号之类的东西。一些用户愉快地在句子中使用他们的URL,然后他们在一段时间内结束。例如。我喜欢http://www.pie.com.It是不错的。解决这个问题的最好方法之一就是根据用户类型生成URL。如果出现问题,他们可以在提交之前分辨出来。

+0

幸运的是,这仅仅是内部参考数据,所以攻击并不是什么大问题。这些URL已经在文本中,因此在输入时寻址它们不是一种选择(尽管它可能是一个很好的选择)。 – gfrizzle 2008-12-04 21:00:30