2008-12-04 65 views
9

這應該很簡單,但我不確定如何最好地解決它。我有一個WinForms應用程序,用戶可以輸入較長的描述。偶爾,他們會輸入網址,RichTextBox會識別它們並在顯示時使它們可點擊。以純文本格式識別URL

我正在將應用程序移到網上,而且我不確定如何使這些相同的URL可點擊。是否有一些半自動的方式將「http://www.google.com」或「www.google.com」轉換爲可點擊的鏈接?我必須訴諸RegEx匹配嗎?

回答

13

這實際上是一個非常困難的問題。你可以用正則表達式來接近但不完美。有潛在的正則表達式模式的一個非常好的擊穿這裏要考慮: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+&@#/%=~_|$]) 
3

當心。如果用戶生成的可點擊網址對其他用戶可見,則會引發跨站腳本攻擊等新問題。另外,您可能需要清理URL。例如,網址中可能有一個&符號,但您需要將其轉義。

所以,實際上有兩個步驟。 1.找到網址。 2.使網址可點擊。

步驟2可能比較困難。

另外,要小心諸如圓括號之類的東西。一些用戶愉快地在句子中使用他們的URL,然後他們在一段時間內結束。例如。我喜歡http://www.pie.com.It是不錯的。解決這個問題的最好方法之一就是根據用戶類型生成URL。如果出現問題,他們可以在提交之前分辨出來。

+0

幸運的是,這僅僅是內部參考數據,所以攻擊並不是什麼大問題。這些URL已經在文本中,因此在輸入時尋址它們不是一種選擇(儘管它可能是一個很好的選擇)。 – gfrizzle 2008-12-04 21:00:30