2013-06-03 39 views
0

有沒有在preg_replace裏面使用urldecode的方法?使用php內preg_replace urldecode

我想是這樣的:

$body = preg_replace('#[url]http://www.mydomain.net/go/?i=(.*?)[/url]#','[url=http://www.mydomain.com/go/?i=$1]'.urldecode($1).'[/url]',$body); 

,但它與錯誤報告:

unexpected T_LNUMBER, expecting T_VARIABLE or '$'

這是我的字符串:

[url]http://www.mydomain.net/?go=http%3A%2F%2Fpastebin.com%2FU5RbSVtQ[/url] 

我需要將其更改爲:

[url=http://www.mydomain.net/?go=http%3A%2F%2Fsafe.dayszone.com%2F%3Fc%3D311d93]http://safe.dayszone.com/?c=311d93[/url] 
+2

也許用一個有效的變量名替換'$ 1'。 – Killrawr

回答

0

兩個問題:1。 您沒有逃過一些正則表達式的元字符,如[? 2。您需要使用preg_replace_callback來進行依賴於函數的替換。

下面是一個例子溶液< PHP 5.3兼容:

$body = '[url]http://www.mydomain.net/go/?i=ABC123[/url]'; 

$body = preg_replace_callback(
    '#'.preg_quote('[url]http://www.mydomain.net/go/?i=').'(.*?)'.preg_quote('[/url]').'#', 
    create_function('$match', 'return \'[url=http://www.mydomain.com/go/?i=\'.$match[1].\']\'.urldecode($match[1]).\'[/url]\';'), 
    $body); 

在PHP 5.3以上,則可以使用一個anonymous function代替create_function(),其是要好很多。

+0

就像一個魅力 –

0

嘗試

preg_replace_callback 

代替

preg_replace