日期:2014-05-16  浏览次数:20509 次

同样的数据ie发送后服务器返回的情况不一样
求教一个问题
同样的参数传输,ie浏览器和其他的服务器响应不一致,post方式
前台jquery,使用escape对foldername进行了转码,后台是 
$par['foldername']=unescape($par['foldername']);
$mids=explode(',',$par['mid']);//需要删除的邮件列表
$res['sql']=$par['foldername'];   //debug1
if($par['foldername']=="已删除" || $par['foldername']=="草稿箱"){
   $par['delete']=true;//垃圾箱内的彻底删除掉
   $res['sql'].=' AA'.$par['foldername'];  //debug2
}

 结果发现在ie下不进入$par['delete']=true;这个if判断,求解

ff查看返回,能返回“已删除 AA已删除”这样满足逻辑的东西,而ie请求的话则只返回“已删除”,if根本就不进去,求解 

------解决方案--------------------
echo $par['foldername'];
看看是什么
------解决方案--------------------
在ie下打印下unescape前后的 $par['foldername'];看下结果
------解决方案--------------------
$res['sql'].=' AA'.$par['foldername'];  //debug2

这样的写法很怪
------解决方案--------------------
$par['foldername'] = trim($par['foldername']);

至于是如何多出的,需要看到你的页面代码
------解决方案--------------------
如果字段是char或varchar类型,那么在字符串比较的时候MySQL使用PADSPACE校对规则,会忽略字段末尾的空格字符,若想做到精确匹配可以使用下面几种方法:
方法1:使用like语句;
方法2:使用binary类型,例如,select binary 'a' = 'a   '
方法3:再添加一个length()条件,例如,select col from table where col = 'a   ' and LENGTH(col) = LENGTH('a   ')

官方手册说明(5.0版本):
http://dev.mysql.com/doc/refman/5.0/en/char.html
11.1.6.1. The CHAR and VARCHAR Types
 All MySQL collations are of type PADSPACE. This means that all CHAR, VARCHAR, and TEXT values in MySQL are compared without regard to any trailing spaces. “Comparison” in this context does not include the LIKE pattern-matching operator, for which trailing spaces are significant.