gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:25:19 24 4
gpt4 key购买 nike

注意:这里使用的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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com