function makeLinks($text) {
$text = preg_replace('%(?<!href=")(((f|ht){1}(tp://|tps://))[-a-zA-^[email protected]:\%_\+.~#?&//=]+)%i',
'<a href="\\1">\\1</a>', $text);
$text = preg_replace('%([:space:]()[{}])(www.[[email protected]:\%_\+.~#?&//=]+)%i',
'\\1<a href="http://\\2">\\2</a>', $text);
return $text;
}
它會錯過,如果我有這樣的事情:- www.website.org
(連字符然後一個空格)在一行的開始。如果我有 - www.website.org - www.website.org它捕獲第二個。鏈接轉換pregmatch使用markdown
難道不應該在第二preg_replace
的空間被覆蓋?
我也試過%(\s\n\r(){})
我運行它通過降價,但不至後(markdown(makeLinks($foo))
),所以我認爲不應該干涉,但是當我把降價關閉,一切都只是回聲出一行它確實使鏈接脫離它們。如果我把makeLinks(markdown($foo))
的行爲與最初一樣......不要在列表項的開頭建立以www開頭的鏈接。
是不是'([[:空間:](){}])'畸形,與缺少']'? – 2011-04-25 15:07:15
我也嘗試添加對應]結束之前'字符類右)',但它實際上並沒有改變結果.. – Damon 2011-04-25 15:19:14
所以你就把它改成了'([[:空間](){}])' ?相當醜陋......那裏的'()'和'[{}]'有什麼意義呢?那麼,如果整件事是一個字符類? – 2011-04-25 15:26:13