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模板引擎SMARTY
Oct 09 PHP
第十五节--Zend引擎的发展
Nov 16 PHP
PHP 引用是个坏习惯
Mar 12 PHP
PHP的构造方法,析构方法和this关键字详细介绍
Oct 22 PHP
PHP获取当前url的具体方法全面解析
Nov 26 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
php结合curl实现多线程抓取
Jul 09 PHP
php编程每天必学之验证码
Mar 03 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
Yii2框架中日志的使用方法分析
May 22 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 PHP
Laravel 错误提示本地化的实现
Oct 22 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
php获取url参数方法总结
2014/11/13 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
python实现apahce网站日志分析示例
2014/04/02 Python
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
Django文件存储 自己定制存储系统解析
2019/08/02 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
德国PC硬件网站:CASEKING
2016/10/20 全球购物
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
微笑面对生活演讲稿
2014/05/13 职场文书
公司宣传语大全
2015/07/13 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
浅析Django接口版本控制
2021/06/26 Python
Selenium浏览器自动化如何上传文件
2022/04/06 Python
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android
Python OpenCV形态学运算示例详解
2022/04/07 Python
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL