Php 如果在eval操作中使用了奇怪的字符,如何警告用户

Php 如果在eval操作中使用了奇怪的字符,如何警告用户,php,Php,在“param”中,如果有一个奇怪的字符,如字母“jfsdf”或其他字符,则eval函数不起作用。我怎样才能解决这个问题 eval函数仅适用于定义良好的条目,如'54+4*3',另一方面,如果它用于'6p+87+4'等条目,则会出现解析错误。是否有任何方法警告用户输入定义良好的语句如果是关于计算受约束的数学表达式,那么延迟选项将是在计算之前使用模式断言。这个函数也更简单,因为它隐式返回表达式结果: $op=$_POST['param']; $statement=eval("return ($op

在“param”中,如果有一个奇怪的字符,如字母“jfsdf”或其他字符,则eval函数不起作用。我怎样才能解决这个问题


eval函数仅适用于定义良好的条目,如'54+4*3',另一方面,如果它用于'6p+87+4'等条目,则会出现解析错误。是否有任何方法警告用户输入定义良好的语句

如果是关于计算受约束的数学表达式,那么延迟选项将是在计算之前使用模式断言。这个函数也更简单,因为它隐式返回表达式结果:

$op=$_POST['param'];
$statement=eval("return ($op);");
如果您想断言
(..)
参数的结构也正确,则需要更复杂的内容


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

首先,根据“奇怪”字符的含义,您应该实现验证来自外部的字符串的函数

$result = preg_replace('#^\s*\d+([-+*/%]\s*\d+\s*)*$#e', '$0', $input);
除了性能下降外,正则表达式在这方面非常有用

在您的情况下,
str_pos()
足以匹配不需要的字符

因此,您的另一个函数应类似于:

$allowed_chars = array('function', 'this' ); //..add desirable ones

function is_alloved_char($char){
 return in_array($char, $allowed_chars);
}
另外,对eval()要非常小心
如果在产品中使用此函数,则说明您做错了。

引用字符串将是一个开始!然后执行一个
addslashes()
。这应该足够了。这看起来像是一场等待发生的跨站点脚本噩梦。另一方面,eval函数仅适用于定义良好的条目,如“54+4*3”。如果它用于诸如“6p+87+4”之类的条目,则会出现解析错误。是否有任何方法警告用户以输入定义良好的语句您绝对不应该将用户提交的数据传递到
eval
调用中。可能存在重复的
/**
 * 
 * @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;
}