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单件模式结合命令链模式使用说明
Sep 07 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
php之Smarty模板使用方法示例详解
Jul 08 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
PHP微信API接口类
Aug 22 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
Laravel多域名下字段验证的方法
Apr 04 PHP
PHP实现百度人脸识别
May 06 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 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
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
js 加载时自动调整图片大小
2008/05/28 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
小程序实现搜索框
2020/06/19 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
JS实现旋转木马轮播图
2020/01/01 Javascript
python实现360的字符显示界面
2014/02/21 Python
python获取本地计算机名字的方法
2015/04/29 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
selenium+python环境配置教程详解
2019/05/28 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
人民调解协议书范本
2014/10/11 职场文书
出差报告格式模板
2014/11/06 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python