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

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

Mary-Kate Olsen
发布: 2024-12-27 22:44:17
原创
704 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板