带功能的Preg_Replace不起作用

时间:2013-03-11 17:29:53

标签: php preg-replace

有人可以向我解释为什么这个函数不会返回用户标记的id?

function userid($name){ 
    $a_sql = mysql_query("SELECT * FROM utenti WHERE tag='$name' ") or die( mysql_error()); 
    $a_id= mysql_result($a_sql ,0,"id"); 
    return $a_id;  
    } 

$text= $_POST["text"]; 
$text = preg_replace('/@([a-zA-Z0-9]+)/e', htmlspecialchars(userid('$1')), $text);

为什么这种方法不起作用?

2 个答案:

答案 0 :(得分:1)

而不是使用preg_replace()使用preg_replace_callback()

http://php.net/manual/en/function.preg-replace-callback.php

这允许您传递 replacement 参数通常所在的函数。


作为旁注,请不要使用已弃用的mysql_*函数。请将MySQLi or PDO替换为预备语句。

答案 1 :(得分:1)

你需要引用整个第二个参数来评估结果为php:

$text = preg_replace('/@([a-zA-Z0-9]+)/e', 'htmlspecialchars(userid($1))', $text);

您正在做的是调用函数htmlspecialcharsuserid并将结果提供给preg_replace