You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中是否支持将字符串形式的运算表达式用于数学运算?

问题原因

直接写$result = $number + $variable;拿不到正确结果,是PHP的隐式类型转换规则导致的:字符串参与算术运算时,PHP只会提取字符串开头的连续数字值做转换,碰到第一个非数字字符就截断。你这里$variable的值是"0 - 10",转换后只能拿到开头的0,最后算出来是50 + 0 = 50,当然得不到预期的40。

实现方案

安全提醒:绝对不能不加校验直接执行外部返回的字符串,否则会引入严重的远程代码执行漏洞
不需要修改$variable原有的字符串格式,先做严格的白名单校验,确认字符串里只包含数学运算允许的字符(数字、四则运算符、括号、小数点、空格),再拼接成合法表达式计算即可:

$number = "50";
// 服务器返回的原始字符串,保持原有带引号的格式不改动
$variable = "0 - 10";

// 校验规则:只允许数字、四则运算符、括号、小数点、空格
if (!preg_match('/^[\d+\-*\/().\s]+$/', $variable)) {
    throw new \Exception("运算片段包含非法字符,拒绝执行");
}

// 拼接完整表达式计算
eval("\$result = $number + $variable;");
echo $result;
// 输出:40

如果业务安全等级要求很高,不想用eval,可以接入专门的数学表达式解析库来做计算,彻底堵死代码执行的风险。


内容的提问来源于stack exchange,提问作者Club

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:33:18