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 echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
浅析Apache中RewriteCond规则参数的详细介绍
Jun 30 PHP
使用PHP备份MYSQL数据的多种方法
Jan 15 PHP
PHP调用C#开发的dll类库方法
Jul 28 PHP
php学习笔记之面向对象
Nov 08 PHP
laravel学习教程之存取器
Jul 30 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 PHP
php数据库操作model类(使用__call方法)
Nov 16 PHP
php base64 编码与解码实例代码
Mar 21 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 PHP
laravel ORM关联关系中的 with和whereHas用法
Oct 16 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实现小型站点广告管理
2006/10/09 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
Python动态加载模块的3种方法
2014/11/22 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
英国川宁茶官方网站:Twinings茶
2019/05/21 全球购物
社区健康教育实施方案
2014/03/18 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
小学语文业务学习材料
2014/06/02 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电