ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法


Posted in PHP onNovember 04, 2014

本文实例讲述了ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法。分享给大家供大家参考。具体方法如下:

这种情况是在 magic_quotes_gpc 开启的情况下发生的。原因是thinkphp在入库的时候没有判断 magic_quotes_gpc 是否开启,不管三七二十一地进行了转义处理。
解决办法是在入口文件增加如下代码则可:

if (!get_magic_quotes_gpc()) {  

    function addslashes_deep($value) {   

        $value = is_array($value) ?  

            array_map('addslashes_deep', $value) :  

            addslashes($value);  

        return $value;  

   }  

   $_POST = array_map('addslashes_deep', $_POST);  

   $_GET = array_map('addslashes_deep', $_GET);  

   $_COOKIE = array_map('addslashes_deep', $_COOKIE);  

   $_REQUEST = array_map('addslashes_deep', $_REQUEST);  

}

有人这样修改DbMysql.class.php中的转义函数:

public function escape_string($str) {  

if (get_magic_quotes_gpc()) {  

return $str;  

}  

if($this->_linkID) {  

return mysql_real_escape_string($str,$this->_linkID);

}else{  

return mysql_escape_string($str);  

}  

}
 

其实这种方法并不可取!因为如果魔术函数on时,而$str又不是post或get得来(比如读取文本、数据库),它还是没加反斜线。
所以我不管$str是否已经被转义,一律先去除转义,然后再加上转义。这样就避免了二次转义,也避免了遗漏转义。
下面是我的修改方法:

public function escape_string($str) {  

$str = stripslashes($str);  

if($this->_linkID) {  

return mysql_real_escape_string($str,$this->_linkID);  

}else{  

return mysql_escape_string($str);  

}  

}

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

PHP 相关文章推荐
php正则
Jul 07 PHP
PHP.MVC的模板标签系统(二)
Sep 05 PHP
php实现的简单压缩英文字符串的代码
Apr 24 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 PHP
php中引用符号(&)的使用详细介绍
Dec 06 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 #PHP
PHP自动重命名文件实现方法
Nov 04 #PHP
php以post形式发送xml的方法
Nov 04 #PHP
PHP中Header使用的HTTP协议及常用方法小结
Nov 04 #PHP
phpmyadmin中禁止外网使用的方法
Nov 04 #PHP
PHP中ini_set与ini_get用法实例
Nov 04 #PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 #PHP
You might like
解析用PHP实现var_export的详细介绍
2013/06/20 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
菜单效果
2006/10/14 Javascript
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
wxPython窗口中文乱码解决方法
2014/10/11 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
python 如何引入协程和原理分析
2020/11/30 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
庆元旦文艺演出主持词
2014/03/27 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书