【发布时间】:2018-10-17 11:04:11
【问题描述】:
我正在尝试从以下函数中删除 eval。我尝试了 sprintf 和 ${} ,但仍然找不到解决方案。
这里是函数:
function parseDbString(string $value = 'Looking for a good {{ $pippo }}'){
$pippo='Pizza';
return preg_replace_callback('/{{(.*?)}}/', function($res) use ($pippo) {
// $val=${trim($res[1])}; Returns "Undefined variable: $pippo"
$val=@eval("return ".trim($res[1]).";"); // Returns "Looking for a good Pizza"
return isset($val) ? $val : $res[0];
},$value);
}
【问题讨论】:
-
我认为 str_replace 不起作用?
-
@Barry 它正在工作。我想知道的是为什么
$val=${trim($res[1])};不起作用 -
您能否构建变量名称及其值的散列并使用该散列来解析字符串中的扩展,而不是评估任意变量?这样会更安全,也更容易调试。
-
也许是
$val=@trim($res[1]); return empty($val) ? $res[0] : $val;?无论如何,$res 是什么,你能 var_dump($res);那里? -
$res 是 preg_replace 的结果数组。
标签: php eval preg-replace-callback custom-function variable-names