$op=$_POST['param'];
$statement=eval("return ($op);");
在"参数"中,如果有一个奇怪的字符,如字母"jfsdf"或其他东西,则 eval 函数不起作用。 如何解决这个问题?
eval 函数只工作定义良好的条目,例如 '54+4*3',另一方面,如果使用诸如 '6p+87+4' 等条目,则会给出解析错误。有没有办法警告用户以输入定义明确的语句
首先,根据你所说的"奇怪"字符是什么意思,你应该实现验证来自外部的字符串的函数。
$allowed_chars = array('function', 'this' ); //..add desirable ones
function is_alloved_char($char){
return in_array($char, $allowed_chars);
}
正则表达式非常适合当你这样做时,除了一些性能下降。
在您的情况下str_pos()
足以匹配不需要的字符。
因此,您的另一个函数应类似于:
/**
*
* @param string
* @return TRUE on success, FALSE otherwise
*/
function is_really_safe($char){
global $allowed_chars; //just make this array visible here
foreach ($allowed_chars as $allowed_char){
if ( str_pos($allowed_char, $char) ){
return false;
}
}
return true;
}
另外,非常非常小心 eval()如果您在产品中使用此功能,那么您做错了什么。
如果是关于评估一个受约束的数学表达式,那么惰性选项是在评估之前使用模式断言。这也更容易,因为它隐式返回表达式结果:
$result = preg_replace('#^'s*'d+([-+*/%]'s*'d+'s*)*$#e', '$0', $input);
如果您想断言括号的结构也正确(..)
则需要更复杂的东西。
如果不匹配,它将返回原始输入字符串。检查以生成警告。