2012-02-12 226 views
0

好的。所以我正在構建一個將bbcoded字符串解析爲html的函數。 BB代碼的鏈接的結構,像這樣:PHP BBCode和鏈接

[url=http://somelink.com/]Link[/url] 

我想讓它:

<a href="http://somelink.com/">Link</a> 

但我也想檢查鏈接是否有效,以保護自己免受XSS。我發現這個正則表達式來檢查有效鏈接:

/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ 

而現在,我試圖preg_match_all的$海峽和foreach匹配檢查,如果它的URL是有效的,然後解析它爲HTML,但似乎我不能這樣做。有什麼建議麼?

+0

您是如何試用它的?你得到什麼輸出/錯誤? – 2012-02-12 14:45:22

+0

您可能會發現,網絡上可用的降價促銷活動將爲您提供所有優惠。 Github有一些列表。 http://github.github.com/github-flavored-markdown/ – 2012-02-12 14:46:31

+0

SoboLAN這裏是一段代碼: $ links = array(); (preg_match('/ \ [url =(。*)\](。*)\ [\/url \] /',$ str,$ links) { echo'

' . print_r($links, true) . '
'; } 它不符合我想要的。 – nvlbg 2012-02-12 14:52:54

回答

0

看看PHP的內置Filter模塊。它自PHP 5.2起可用,幷包含FILTER_VALIDATE_URL常量來過濾有效的URL。看到一些usage examples

從未個人使用過,但我認爲繼承語言內置功能比使用正則表達式更安全(因爲您看起來不像正則表達式)。

+0

這不是我的問題。 – nvlbg 2012-02-12 14:55:38

+0

指定問題比:) – J0HN 2012-02-12 14:56:21

+0

我不能讓正則表達式代替BBCode到html並檢查有效的URL。 – nvlbg 2012-02-12 14:57:45