我有这些代码:
$string = 'Hello [*tt();*], how are you today?';
preg_match("/\[\*(.*?)\*\]/",$string,$match);
$func = $match[1];
$d = eval($func);
$newstring = preg_replace("/\[\*(.*?)\*\]/",$d,$string);
echo $newstring;
function tt() {
return 'test';
}
我认为他们从他们那里得到了我的意思。我想替换tt();与它的输出。我期望它的工作,但tt();替换为空(null string)。
答案 0 :(得分:3)
来自PHP文档:http://au2.php.net/manual/en/function.eval.php
eval()返回NULL,除非在计算代码中调用return,在这种情况下返回传递给return的值。
$d = eval("return $func");
eval
应谨慎使用。见When is eval evil in php?
答案 1 :(得分:1)
$d = eval($func);
应该是
eval('$d = ' . $func);
答案 2 :(得分:1)
你的正则表达式没问题。您的问题在于eval()
声明。它不会返回您期望的值。分配也需要在eval()
中进行。
function tt() {
return 'test';
}
$string = 'Hello [*tt();*], how are you today?';
preg_match("/\[\*(.*?)\*\]/",$string,$match);
$func = $match[1];
eval('$d = ' . $func);
$newstring = preg_replace("/\[\*(.*?)\*\]/",$d,$string);
echo $newstring;