注意:在这里,Eval是完全已知的,分析的字符串仅由管理员输入,目的是将指令存储在数据库中,而不受指令的限制。如果您有一个好的选择,那么它总是会受到赞赏,但不要只说“评估是不好的”。
例如,我在PHP中有一个String
$myString = "(35*$var1*64)/$var2";
我想要eval()
这个字符串,但是在此之前,我想像这样修改字符串中的所有变量:
$var2 -> $_POST['var2']
中的变量后面可能有空格,也可能没有空格$myString
。
当我eval时$myString
,PHP会引发错误“未定义的变量$ var1”。PHP读取了字符串并解析了变量,因此我想应该有一种解析字符串中所有变量的方法。
输出应为:
$myStringParsed = "(35*$_POST['var1']*64)/$_POST['var2']";
或同等学历。
也许不是最好的解决方案,但是您可以预处理$ _POST变量并生成$ variablesString,如下所示:
$variablesString = '';
foreach($_POST as $key => $val) {
$variablesString .= '$' . $key . ' = ' . $val . ';' . PHP_EOL;
}
eval($variablesString . PHP_EOL . $myString)
对于字符串支持,您可以检查$ val是否为字符串,如果是,则用引号将其引起来。
$myString = 'return (35 * $var1 * 64) / $var2;';
$re = "/\\$(\\w*)/im";
preg_match_all($re, $myString, $matches);
foreach($matches[1] as $match) {
$search = '$' . $match;
$replace = '$_POST[\'' . $match . '\']';
$myString = str_replace($search, $replace, $myString);
}
echo eval($myString);
你可以在这里检查
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句