preg_replace с функцией замены

Как вы используете 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 ); 

Модификатор теперь устарел в пользу 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 

Я думаю, что вы забыли e модификатор (PREG_REPLACE_EVAL) в функции preg_replace, этот модификатор необходим для оценки строки замены как PHP-кода. Это должно быть так:

 $post = preg_replace('~\[CallName\]([^]]+)\[/CallName\]~e', 'getInfo("$1", "fullname")', $post); 

Подробнее см. В этом руководстве .