2011-11-15 157 views
0

可能重复:
how to evaluate formula passed as string in php?从字符串变量PHP获取真正的价值

我有这样一个字符串 “10 * 0.1 + 800” 我想获得的实际答案这个字符串是数字而不是字符串值。

我试过floatval php的功能,但没有运气。任何想法?

+0

不要使用'eval',尽管很多人所提出的建议吧! – fresskoma

+0

@ x3ro然后什么是最好的方法来做到这一点,感谢您的意见 –

+0

看看链接的“重复问题”。被接受的答案包含一个完整的数学表达式解析器,它不会引入eval的安全风险。 – fresskoma

回答

3

你将不得不“评估”使用PHP的eval函数的字符串:

eval('return ' . $string . ';'); 

但我真的只能这样做,如果你能信任的字符串。因为你在这里做的确是在执行PHP代码。如果你不能相信字符串,这是一个可能的安全漏洞。

其他可能的选择是使用解析器。我相信,这个任务已经有可用的库。

+1

“但是我真的只会这样做,如果你可以信任字符串” - 我无法想象你想要评估的情况任意字符串,即使你认为你可以信任它,总会有一个允许插入随机字符串的错误。 – fresskoma

+2

@ x3ro:但再一次:你可以在任何地方都有错误,“停止编程”并不是真正的选择,不是吗? – aurora

+0

不,但不应该使用eval,如果它不是绝对必要的,并且有很多不使用eval的数学表达式解析器,那么不是吗? – fresskoma

1

你可以尝试:

$string = "10*0.1+800"; 
$result = eval("return "+$string); 

但使用eval的安全隐患要小心!

+0

thneks,............... –

0

你可以简单地使用php的eval函数来评估字符串。

$str = "10*0.1+800" 
eval('return ' . $str. ';');