2013-10-31 62 views
-5

我知道這不是一個新問題,但我不是preg_replace函數的專家。我曾經在互聯網上找到這個代碼來將URL等變成可點擊的鏈接,但自PHP 5.3以來,我收到了「不推薦使用」的通知,不知道如何解決這個問題......我嘗試添加/分隔符,但沒有成功。有任何想法嗎?將特定的eregi_replace轉換爲preg_replace函數

function clickLinks($sText) { 
$sText = eregi_replace('(((f|ht){1}tp://)[[email protected]:%_+.~#?&//=]+)', 
'<a href="\1" target="_blank"><font color="black">\1</font></a>', $sText); 
$sText = eregi_replace('([[:space:]()[{}])(www.[[email protected]:%_+.~#?&//=]+)', 
'\1<a href="http://\2" target="_blank"><font color="black">\2</font></a>', $sText); 
$sText = eregi_replace('([_.0-9a-z-][email protected]([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})', 
'<a href="mailto:\1"><font color="black">\1</font></a>', $sText); 
return $sText; 
} 
+0

Gazillions那裏。 – AbraCadaver

回答

0

但是,以幫助。只需添加定界符的模式的開頭和結尾,我用#和逃避是在\圖樣,使發動機知道它不是一個分隔符任何分隔符,所以\#:

$sText = preg_replace('#(((f|ht){1}tp://)[[email protected]:%_+.~\#?&//=]+)#', 
'<a href="\1" target="_blank"><font color="black">\1</font></a>', $sText); 
+0

剛剛注意到char類中的// =,爲什麼兩個/? – AbraCadaver

+0

不知道爲什麼,只是從網上覆制代碼,它做的工作...非常感謝您的幫助!相應地更改了其餘的代碼,並且它再次完美地工作! – user2943225

+0

嗯,'(f | ht){1} tp'相當緊張,imo。 '(ftp | http)'會更清楚一點嗎? – halfer

0

之間的主要性差異eregi和預浸料是基於的perl正則表達式PREG,Unix和參看preg_ *函數的正則表達式eregi必須以delemiter開始,像的例子 '/'

$regex = '/[a-z]/'; 
preg_replace($regex, $replacement, $string) 

preg_replace