博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】在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()方法:
/**
* SQL指令安全过滤
* @access public
* @param string $str SQL字符串
* @return string
*/
public function escapeString($str) {
return addslashes($str);
}
但是没有判断 magic_quotes_gpc 是否开启,所有如果magic_quotes_gpc已经开启了,则等于了重新又一次的对特殊字符转义了。
如果你的主机是在别人的虚拟主机中,无法自行修改PHP版本,那么解决方法是修改ThinkPHP 3.2 的escapeString()方法:
/**
* SQL指令安全过滤
* @access public
* @param string $str SQL字符串
* @return string
*/
public function escapeString($str) {
$str = stripslashes($str);
return addslashes($str);
}
这样的解决方法好处在于不论 magic_quotes_gpc 是开启或者是关闭,第一步都是通过stripslashes()先进行反转义,第二步再进行addslashes()转义,这样无论如何字符串都会且只可能被转义一次。
版权归 马富天PHP博客 所有
本文标题:《ThinkPHP3.2中出现重复反斜线转义以及解决方法》
本文链接地址:http://www.mafutian.net/167.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0
评论审核未开启 |