有没有办法在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]
答案 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(),这样会更好。