我有一個自定義標記解析函數,多年來一直運行良好。我最近發現了一個我以前沒有注意到的錯誤,但我無法修復它。如果任何人都可以幫助我,那真是太棒了。所以我有一個定製的論壇和基於文本的MMORPG,並且每一個輸入都會被清理並解析爲bbcode,比如標記。它還會解析出網址,並將其轉換爲合法鏈接,然後轉到退出網頁,並提供您要離開網站的免責聲明......所以我遇到的問題是,當我用戶在多個網址中發佈多個網址時文本框(假設\ n分隔),它只會將每個其他網址轉換爲鏈接。這裏是URL的解析器:PHP正則表達式URL解析問題preg_replace
$markup = preg_replace("/(^|[^=\"\/])\b((\w+:\/\/|www\.)[^\s<]+)" . "((\W+|\b)([\s<]|$))/ei", '"$1<a href=\"out.php?".shortURL("$2")."\" target=\"_blank\">".shortURL("$2")."</a>$4"', $markup);
正如你可以看到它調用一個PHP函數,但這不是問題在這裏。然後將整個文本塊同時傳遞到此preg_replace,而不是逐行或任何其他方式。
- 如果有寫這個的preg_replace的一個更簡單的方法,請讓我知道
- 如果你能弄清楚這是爲什麼只解析每一個其他網址,這裏是我的終極目標
輸入例:
http://skylnk.co/tRRTnb
http://skylnk.co/hkIJBT
http://skylnk.co/vUMGQo
http://skylnk.co/USOLfW
http://skylnk.co/BPlaJl
http://skylnk.co/tqcPbL
http://skylnk.co/jJTjRs
http://skylnk.co/itmhJs
http://skylnk.co/llUBAR
http://skylnk.co/XDJZxD
例OUTPUT:
<a href="out.php?http://skylnk.co/tRRTnb" target="_blank">http://skylnk.co/tRRTnb</a>
<br>http://skylnk.co/hkIJBT
<br><a href="out.php?http://skylnk.co/vUMGQo" target="_blank">http://skylnk.co/vUMGQo</a>
<br>http://skylnk.co/USOLfW
<br><a href="out.php?http://skylnk.co/BPlaJl" target="_blank">http://skylnk.co/BPlaJl</a>
<br>http://skylnk.co/tqcPbL
<br><a href="out.php?http://skylnk.co/jJTjRs" target="_blank">http://skylnk.co/jJTjRs</a>
<br>http://skylnk.co/itmhJs
<br><a href="out.php?http://skylnk.co/llUBAR" target="_blank">http://skylnk.co/llUBAR</a>
<br>http://skylnk.co/XDJZxD
<br>
你能給一個失敗的測試用例嗎? – nhahtdh 2013-05-07 05:55:50
我已經更新了帖子。 – 2013-05-08 03:54:17