如何在评估操作中使用奇怪的字符时警告用户


how to warn user if it is used a strange character in eval operation

$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);

如果您想断言括号的结构也正确(..)则需要更复杂的东西。

如果不匹配,它将返回原始输入字符串。检查以生成警告。

相关文章: