使用php中的preg_replace内部使用urldecode

时间:2013-06-03 05:53:39

标签: php preg-replace

有没有办法在urldecode内使用preg_replace

我试过这样的事情:

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

但它报告错误:

  

意外T_LNUMBER,期待T_VARIABLE或'$'

这是我的字符串:

[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 个答案:

答案 0 :(得分:0)

尝试

preg_replace_callback

取代

preg_replace

答案 1 :(得分: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(),这样会更好。