首页 >后端开发 >php教程 >如何安全地评估 PHP 中字符串的数学表达式?

如何安全地评估 PHP 中字符串的数学表达式?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-27 22:44:17697浏览

How to Safely Evaluate Mathematical Expressions from Strings in PHP?

使用 Eval 计算字符串中的数学表达式

问题:

当尝试计算使用 eval() 将数学表达式存储在字符串中,出现“解析错误”,表明存在输入意外结束。

解决方案:

虽然出于安全考虑,通常不建议使用 eval() 来实现此目的,但修改以下代码可以解决该问题:

$ma = "2+10";
$p = eval('return ' . $ma . ';');
print $p;

通过在 eval() 函数中显式返回结果,代码需要完整的一行

替代解决方案:

更安全、更高效的解决方案是使用分词器/解析器来处理数学表达式。这是一个基于正则表达式的简单示例:

$ma = "2+10";

if (preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE) {
    $operator = $matches[2];

    switch ($operator) {
        case '+':
            $p = $matches[1] + $matches[3];
            break;
        case '-':
            $p = $matches[1] - $matches[3];
            break;
        case '*':
            $p = $matches[1] * $matches[3];
            break;
        case '/':
            $p = $matches[1] / $matches[3];
            break;
    }

    echo $p;
}

以上是如何安全地评估 PHP 中字符串的数学表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn