2011-11-15 118 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. ';');