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提取字符串中的图片地址[正则表达式]
Nov 12 PHP
PHP系列学习之日期函数使用介绍
Aug 18 PHP
10个简化PHP开发的工具
Dec 25 PHP
php操作xml入门之cdata区段
Jan 23 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
php文件上传后端处理小技巧
May 22 PHP
使用JavaScript创建新样式表和新样式规则
Jun 14 PHP
如何使用php等比例缩放图片
Oct 12 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 PHP
浅谈PHP7中的一些小技巧
May 29 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
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
php microtime获取浮点的时间戳
2010/02/21 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
Python数据结构之Array用法实例
2014/10/09 Python
python验证码识别实例代码
2018/02/03 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
2014端午节活动策划方案
2014/01/27 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
先进党支部事迹材料
2014/12/24 职场文书
2015年共青团工作总结
2015/05/15 职场文书
对公司的意见和建议
2015/06/04 职场文书
财务年终工作总结大全
2019/06/20 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
Python面向对象编程之类的概念
2021/11/01 Python
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
Python安装使用Scrapy框架
2022/04/12 Python