2009-12-20 95 views
0

功能不能正常工作,調用函數時的$ 1值丟失:問題裏面的preg_replace

echo preg_replace('"\b(http://\S+)"', '<a href="$1">'.findTopDomain('$1').'</a>', $text); 

做工精細,輸出:stackoverflow.com

echo preg_replace('"\b(http://\S+)"', '<a href="$1">'.findTopDomain('http://stackoverflow.com/questions/ask').'</a>' , $text); 

我需要發在preg_replace中函數的$ 1值。 我在做什麼錯?

回答

2

您需要設置e modifier有替換表達,進行執行:

preg_replace('"\b(http://\S+)"e', '"<a href=\\"$1\\">".findTopDomain("$1")."</a>"', $text) 

請注意,您的替代現在已經是一個有效的PHP表達式。在這種情況下,表達式將被評估爲:

"<a href=\"$1\">".findTopDomain("$1")."</a>" 

而且不要忘記逃跑的輸出至少htmlspecialchars

preg_replace('"\b(http://\S+)"e', '"<a href=\\"".htmlspecialchars("$1")."\\">".htmlspecialchars(findTopDomain("$1"))."</a>"', $text)