公告:本站提供编程开发方面的技术交流与分享,打造最佳教程网,希望能为您排忧解难!

PHP教程PHP提交内容被转义的解决方法

PHP提交内容被转义的解决方法

更新时间:2013-06-01 09:45:05 |

提交的表单内容或者插入数据库内容被转义对初学PHP的同志来说是比较头疼的事,那么我们该如何解决呢?

PHP配置中有3个选项会影响我们获取的内容:

  • magic_quotes_gpc:影响到 HTTP 请求数据(GET,POST 和 COOKIE),这个也是我们开发或者配置服务器的时候最常见的问题。
  • magic_quotes_runtime:从外部来源取得数据并返回的函数 会被反斜杆转义,一般情况下PHP默认关闭的。
  • magic_quotes_sybase :使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果两个选项被同时打开的话,单引号将会被转义成两个单引号。而双引号、反斜线 和 NULL 字符将不会进行转义。 

解决办法

  • 修改php.ini配置文件,将选项值设置为off;然后重启Apache或者Nginx;这个是最简单最有效的办法。
  • 如果空间服务器没有权限修改配置的情况下,可以使用stripslashes 函数将被转义的内容还原回来即可,注意如果是数组将循环替换就行了。
  • 如果存储正常,从数据库读取出来被转义了,得到的内容再用stripslashes函数过滤一下即可。

参考PHP代码

我们可以通过get_magic_quotes_gpc()方法来判断转义是否被打开

1<?php

2//下面内容直接拷贝至入口文件最顶部即可

3if(@get_magic_quotes_gpc()){//判断是否开启魔术转义

4

    function stripQuotes(&$var){

        if(is_array($var)) {

            while(list($k,$v) = each($var)) {

8                $stripQuotes($var[$k]);

9            }

        } else {

11            $var = stripslashes($var);

12        }

13    }

14

15    //复原GET数据

    if(!empty($_GET)) {

17        stripQuotes($_GET);

18    }

19

20    //复原POST数据

    if(!empty($_POST)) {

22        stripQuotes($_POST);

23    }

24

25    //复原COOKIE数据

    if(!empty($_COOKIE)) {

27        stripQuotes($_COOKIE);

28    }

29

30    //复原上传内容数据

    if(!empty($_FILES)) {

        while (list($k,$v) = each($_FILES)) {

            if(isset($_FILES[$k]['name'])) {

34                stripQuotes($_FILES[$k]['name']);

35            }

36        }

37    }

38}

39

最佳教程网

最大的技术交流平台 www.goodxyx.com© CopyRight 2011-2013, All Rights Reserved

浙ICP备11033019号