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 var_dump遍历对象属性的函数与应用代码
Jun 04 PHP
php的一个简单加密解密代码
Jan 14 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
Nov 20 PHP
微信access_token的获取开发示例
Apr 16 PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 PHP
Yii2如何批量添加数据
May 17 PHP
PHPstorm快捷键(分享)
Jul 17 PHP
php简单中奖算法(实例)
Aug 15 PHP
详解php语言最牛掰的Laravel框架
Nov 20 PHP
php微信公众号开发之图片回复
Oct 20 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
php读取xml实例代码
2010/01/28 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
读jQuery之三(构建选择器)
2011/06/11 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
简单的Python抓taobao图片爬虫
2014/10/26 Python
python学习 流程控制语句详解
2016/06/01 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
python 两种方法删除空文件夹
2020/09/29 Python
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
大学生简历中个人的自我评价
2013/10/06 职场文书
护理专业自荐信
2013/12/03 职场文书
竞职演讲稿范文
2014/01/11 职场文书
小学开学标语
2014/07/01 职场文书
大学生创业计划书
2014/08/14 职场文书
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL