thinkphp php中的反斜杠函数magic_quotes_gpc是否开启,自动添加反斜杠

--begin by itlife365
thinkphp php中的反斜杠函数magic_quotes_gpc是否开启,自动添加反斜杠

php中的反斜杠是开启好还是关闭好?如果开启的话,那每次从数据库中取出的数据不是都要stripslashes?会不会很麻烦?

昨天用thinkphp做了个cms的小程序,本地测试正常但是传到网站后发现,提交内容保存的时候会自动在双引号前面增加一个反斜杠“\”,而且每保存一次增加一个反斜杠,很是郁闷。

原来PHP程序为了防止注入或者溢出,通过PHP 指令 magic_quotes_gpc自动在双引号、单引号、反斜杠、NULL前面添加反斜杠“\”。
但是我们日常输入的信息免不了有很多引号和双引号,这时候就要去掉添加的反斜杠。

默认PHP 指令 magic_quotes_gpc是on的,也就是打开的。这时候就可以用stripslashes() 函数删除自动添加的反斜杠。用法就是:比如包含字符串的变量是$str,那么就用stripslashes() 函数处理一下这个字符串:stripslashes($str),输出的结果就是去掉反斜杠的。
由于thinkphp在数据入库时未判断 magic_quotes_gpc是否开启,而直接进行了转义。

解决办法就是可以使用函数 get_magic_quotes_gpc() 进行检测,如果是打开的状态,那么就去除反斜杠,如果是关闭的状态,则不去除反斜杠。

1、平常php的处理程序代码如下:

$str=$_POST["str"];//读取str的内容赋值给$str变量

if(get_magic_quotes_gpc())//如果get_magic_quotes_gpc()是打开的

{
$str=stripslashes($str);//将字符串进行处理

}

2、如果服务器是自己的,自己可以修改php.ini的话,自己关闭即可。

3、thinkphp
ThinkPHP自动转义的解决方法
办法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);
    }
}
h或者在每次接收数据的时候处理,比如:
$data['content'] = stripslashes(htmlspecialchars_decode($_POST['content']))

办法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);
}

在 PHP 5.4 中,magic_quotes 的相关配置项已经被剔除!这就意味着如果需要,我们必须手动对数据添加魔术引号。
这就告诉我们,这个 magic_quotes 的作用其实多余的,官方不再建议使用,如果有需要,手动添加即可。
----end by itlife365

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年2月    »
12
3456789
10111213141516
17181920212223
2425262728
搜索
标签列表
网站分类
最新留言
    文章归档
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.闽ICP备11018667号-2