马富天PHP博客

ThinkPHP3.2中出现重复反斜线转义以及解决方法

学习笔记 马富天 2016-07-21 16:26:57 5 0

【摘要】在PHP5.3.0版本magic_quotes_gpc默认是开启的,而ThinkPHP3.2对于字符串类型的数据都会进行escape_string处理,所以当使用ThinkPHP3.2在PHP5.3.0版本的时候就会出现重复反斜线转义。

这种情况是在 magic_quotes_gpc 开启的情况下发生的。原因是thinkphp在入库的时候没有判断 magic_quotes_gpc 是否开启,不管三七二十一地进行了转义处理。

在ThinkPHP3.2中:/ThinkPHP/Library/Think/Db.class.php中第871行上写了escapeString()方法:

  1. /**
  2.  * SQL指令安全过滤
  3.  * @access public
  4.  * @param string $str  SQL字符串
  5.  * @return string
  6.  */
  7. public function escapeString($str) {
  8.     return addslashes($str);
  9. }

但是没有判断 magic_quotes_gpc 是否开启,所有如果magic_quotes_gpc已经开启了,则等于了重新又一次的对特殊字符转义了。

如果你的主机是在别人的虚拟主机中,无法自行修改PHP版本,那么解决方法是修改ThinkPHP 3.2 的escapeString()方法:

  1. /**
  2.  * SQL指令安全过滤
  3.  * @access public
  4.  * @param string $str  SQL字符串
  5.  * @return string
  6.  */
  7. public function escapeString($str) {
  8. 	$str = stripslashes($str);	
  9.     return addslashes($str);
  10. }

这样的解决方法好处在于不论 magic_quotes_gpc 是开启或者是关闭,第一步都是通过stripslashes()先进行反转义,第二步再进行addslashes()转义,这样无论如何字符串都会且只可能被转义一次。

版权归 马富天PHP博客 所有

本文标题:《ThinkPHP3.2中出现重复反斜线转义以及解决方法》

本文链接地址:http://www.mafutian.net/167.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 说一说魔术引号(Magic Quote) 》 下一篇《 array_map()简单介绍 》
分享到:

暂无评论

评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码