如何将preg_replace
与函数一起用作替换参数?我的代码出错了。
function getInfo($id,$slot){
if(!$id){ return '<b>Error</b> Id Not Returned. Please contact support@site.com for more information.'; }
$mm = mysql_query("SELECT * FROM `users` WHERE `id`='".$id."'");
$mma = mysql_fetch_assoc($mm);
$p = $mma[$slot];
return $p;
//return $id; <- Debug (Returns ID given)
}
$post = preg_replace(
"/\[CallName]([^]]+)\[\/CallName\]/",
getInfo('\\1',"fullname"),
$post
);
答案 0 :(得分:2)
e
修饰符现在deprecated支持 preg_replace_callback 。
样本用法:
$x = 'abcd-efg-hijk-lmnop';
$x = preg_replace_callback(
'/-(.)/', //pattern
function($matches) { //callback
return strtoupper($matches[1]);
},
$x //subject
);
echo $x; //abcdEfgHijkLmnop
答案 1 :(得分:0)
我认为您在preg_replace函数中忘记了e
修饰符(PREG_REPLACE_EVAL),需要此修饰符来将替换字符串计算为PHP代码。它应该是这样的:
$post = preg_replace('~\[CallName\]([^]]+)\[/CallName\]~e', 'getInfo("$1", "fullname")', $post);
有关详细信息,请参阅this manual。