0

有没有办法在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]
4

2 回答 2

0

尝试

preg_replace_callback

代替

preg_replace
于 2013-06-03T06:04:43.483 回答
0

几个问题: 1. 您没有转义一些正则表达式元字符,例如[and ? 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 及更高版本中,您可以使用匿名函数而不是create_function (),这要好得多。

于 2013-06-03T06:10:44.227 回答