这个 preg_replace 命令有什么问题?
我有这些代码:
$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();替换为空(空字符串)。
I have these codes:
$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';
}
I think they reach my mean from them. I want to replace tt(); with its output.I expected it works but tt(); replace with nothing(null string).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
来自 PHP 文档: https://www.php.net/manual/en /function.eval.php
eval() 返回 NULL,除非在计算代码中调用 return,在这种情况下,将返回传递给 return 的值。
eval
应谨慎使用。请参阅 php 中的 eval 什么时候是邪恶的?From the PHP documentation: https://www.php.net/manual/en/function.eval.php
eval() returns NULL unless return is called in the evaluated code, in which case the value passed to return is returned.
eval
should be used with caution. See When is eval evil in php?$d = eval($func);
应该是
eval('$d = ' . $func);
$d = eval($func);
should be
eval('$d = ' . $func);
你的正则表达式没问题。您的问题出在
eval()
语句上。它不会返回您期望的值。赋值也需要在eval()
中进行。Your regular expressions are fine. Your problem is with the
eval()
statement. It does not return a value like you expect. The assignment needs to happen in theeval()
as well.