ThinkPHP自动转义的解决方法

发布时间:2020-05-03编辑:脚本学堂
php.ini中如何开启了magic_quotes_gpc,由于thinkphp在数据入库时未判断 magic_quotes_gpc是否开启,而直接进行了转义。本文介绍二个解决方法,供大家参考。

办法1:在baseAction中自动执行
 

复制代码 代码示例:
public function _initialize()
{
//去除转义 不用系统的自动转义
if (get_magic_quotes_gpc()) {
$this->mystrip(&$_POST);
$this->mystrip(&$_GET);
}
//去除转义方法
public function mystrip($data){
if (is_array($data)){
  foreach ($data as &$v){
$this->mystrip(&$v);
  }
}else{
  $data = stripslashes($data);
    }
}

或在接收数据的时候处理:
 

复制代码 代码示例:
$data['content'] = stripslashes(htmlspecialchars_decode($_POST['content']))
 

主要使用stripslashes函数。

办法2:是在入口文件增加如下代码则可:(该方法未测试)
 

复制代码 代码示例:
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);
}