开启的情况下发生的
分类:博客热点

?php/***去除魔术变换*/classkillMagicQuote{publicfunctionStrip_Magic_Slashes($varImp){$varImp=is_array($varImp)?array_map(array($this,''Strip_Magic_Slashes''),$varImp):#将数组中所有值进行函数操作.stripslashes($varImp);return$varImp;}/***去除$_GET$_POST$_REQUEST内魔术符号.*/publicfunctionMagic_Quotes_Off(){if(get_magic_quotes_gpc()){$_GET=$this-Strip_Magic_Slashes($_GET);$_POST=$this-Strip_Magic_Slashes($_POST);$_REQUEST=$this-Strip_Magic_Slashes($_REQUEST);}}}?

本文实例讲述了ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法。分享给大家供大家参考。具体方法如下:

相信很多人都碰到过与magic_quotes有关的问题.上面给出的代码是我学习别人的(不是抄:)OpenPNE里的东西(小日本的开源SNS).

这种情况是在 magic_quotes_gpc 开启的情况下发生的。原因是thinkphp在入库的时候没有判断 magic_quotes_gpc 是否开启,不管三七二十一地进行了转义处理。解决办法是在入口文件增加如下代码则可:

<

复制代码 代码如下:if (!get_magic_quotes_gpc { function addslashes_deep { $value = is_array ? array_map('addslashes_deep', $value) : addslashes; 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 { if (get_magic_quotes_gpc { return $str; } if { return mysql_real_escape_string;}else{ return mysql_escape_string; } }

其实这种方法并不可取!因为如果魔术函数on时,而$str又不是post或get得来,它还是没加反斜线。所以我不管$str是否已经被转义,一律先去除转义,然后再加上转义。这样就避免了二次转义,也避免了遗漏转义。下面是我的修改方法:

复制代码 代码如下:public function escape_string { $str = stripslashes; if { return mysql_real_escape_string; }else{ return mysql_escape_string; } }

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

本文由威尼斯在线注册平台发布于博客热点,转载请注明出处:开启的情况下发生的

上一篇://每页显示的数据数 var $page,分页显示是一种非常常见的浏览和显示大量数据的方法 下一篇:没有了
猜你喜欢
热门排行
精彩图文