2012-08-14 57 views
0

可能重複:
Replace URLs in text with HTML linksPHP轉換所有URL轉換成HTML鏈接

我傳遞包含多個URL字符串變量,通過下面的函數來獲得同樣的事情,只有正確HTML鏈接。

public function convertUrlsToLinks($text){ 
    return preg_replace('@(?<![.*">])\b(?:(?:https?|ftp|file)://|[a-z]\.)[-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$]@i', '<a href="\0" target="_blank">\0</a>', $text); 
} 

它根本不起作用。我錯過了什麼?

代碼必須跳過現有的聯繫,<img>src值(或類似的東西。)

回答

0

假設你已經有一個HTML文檔,我有限的網址承認

  • 不開始與「
  • 以http或www

我想出了有這樣一個解決方案:

$string = 'lorem ipsum www.foo.bar dolor sit <a href="http://fail.org">http://fail.org</a><img src="www.foo.bar"> amet http://abc.de.fg.com?bar=baz'; 
$rx = '%[^"](?P<link>(?:https?://|www\.)(?:[-_a-z0-9]+\.)+(?:[a-z]{2,4}|museum/?)(?:[-_a-z0-9/]+)?(?:\?[-_a-z0-9+\%=&]+)?(?!</a)(\W|$))%ui'; 
echo preg_replace_callback($rx, function($matches) { 
    return '<a href="'.$matches['link'].'">'.$matches['link'].'</a>'; 
}, $string).PHP_EOL; 

輸出字符串是

lorem ipsum<a href="www.foo.bar ">www.foo.bar </a>dolor sit <a href="http://fail.org">http://fail.org</a><img src="www.foo.bar"> amet<a href="http://abc.de.fg.com?bar=baz">http://abc.de.fg.com?bar=baz</a> 

正則表達式應該工作作爲intendet,你的一個例子字符串可以幫助