识别纯文本 URL

Posted

技术标签:

【中文标题】识别纯文本 URL【英文标题】:Recognize URL in plain text 【发布时间】:2010-09-25 09:51:52 【问题描述】:

这应该很容易,但我不确定如何最好地进行。我有一个 WinForms 应用程序,可让用户输入长描述。有时,他们会输入 URL,RichTextBox 会识别它们并在显示时使它们可点击。

我正在将应用程序移至网络,但我不确定如何使这些相同的 URL 可点击。是否有一些半自动的方法可以将“http://www.google.com”或“www.google.com”转换为可点击的链接?我必须求助于 RegEx 匹配吗?

【问题讨论】:

【参考方案1】:

这实际上是一个非常困难的问题。您可以使用正则表达式接近,但并不完美。这里有一个非常好的潜在正则表达式模式细分: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+&@#/%=~_|$])

【讨论】:

【参考方案2】:

小心。如果您的用户生成的可点击 URL 对其他用户可见,那么您将引入跨站点脚本攻击等新问题。此外,您可能需要清理 URL。例如,URL 中可能有一个 & 符号,但您需要对其进行转义。

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

第 2 步可能更难。

另外,请注意括号之类的内容。一些用户乐于在一个句子中使用他们的 URL,然后以句点结尾。例如。我喜欢http://www.pie.com.It 很好。解决此问题的最佳方法之一就是在用户键入时生成 URL。如果出现问题,他们将能够在提交之前告知。

【讨论】:

幸运的是,这只是内部参考数据,因此攻击不是什么大问题。 URL 已经在文本中,因此不能在输入时对它们进行寻址(尽管它会是一个不错的选择)。

以上是关于识别纯文本 URL的主要内容,如果未能解决你的问题,请参考以下文章

在纯文本中匹配URL

用指向 URL 的链接替换文本中的 URL

EXchange导出通讯录提取url纯文本

带有文本和日历的多部分电子邮件:Outlook 无法识别 ics

如何在 Golang 中处理纯文本 HTTP Get 响应?

从外部 URL 获取 JSON 数据并将其以纯文本形式显示在 div 中