php - 解析 PHP 字符串中的变量

标签 php parsing eval

注意:这里使用的eval是全知识的,解析出来的字符串只有管理员输入,目的是将指令存入数据库,对指令没有限制。 如果您有一个好的选择,我们总是很感激,但不要只是说“eval 不好”。

例如,我在 PHP 中有一个字符串

$myString = "(35*$var1*64)/$var2";

我想eval()这个字符串,但是之前,我想像这样修改字符串中的所有变量:

$var2 -> $_POST['var2']

$myString 中的变量后面可能有也可能没有空格。

当我评估 $myString 时,PHP 抛出错误“Undefined variable $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);

可以查一下here

关于php - 解析 PHP 字符串中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37540203/

相关文章:

Java - 是否可以找出字符串的DecimalFormat

python - 列名中带有空格的 Pandas DataFrame eval

Javascript json eval() 注入(inject)

PHP - 将数组作为字符串返回

php - MySQL fulltext/regexp/levenshtein 搜索优化

php - tinymce - 浏览图像按钮在插入/编辑弹出窗口中不可见

parsing - 使用 clj-time 将 Clojure #inst 即时时间转换为 Joda 时间

c# - 对泥浆/交互式小说解析器应该采用的方法感到困惑

javascript - eval() 和全局范围

php - mysql错误: could not start the service mysql on local computer error 193: oxc1