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与javascript对多项选择的处理
Oct 09 PHP
php入门小知识
Mar 24 PHP
hessian 在PHP中的使用介绍
Dec 13 PHP
php模板中出现空行解决方法
Mar 08 PHP
PHP比你想象的好得多
Nov 27 PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 PHP
php中bind_param()函数用法分析
Mar 28 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
php数据序列化测试实例详解
Aug 12 PHP
php实现socket推送技术的示例
Dec 20 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 日期时间函数常用总结
2012/06/12 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
python实现的简单FTP上传下载文件实例
2015/06/30 Python
详解Python发送email的三种方式
2018/10/18 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
python安装scipy的步骤解析
2019/09/28 Python
如何通过python实现人脸识别验证
2020/01/17 Python
python机器学习库xgboost的使用
2020/01/20 Python
python绘制玫瑰的实现代码
2020/03/02 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
外贸业务员求职信范文
2013/12/12 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书
vue使用echarts实现折线图
2022/03/21 Vue.js
Java数据结构之堆(优先队列)
2022/05/20 Java/Android