关注,我以前一直是进行addslashes()转义的,但最近发现不能多了好多的"\",不转义反而正常运行。

解决方案 »

  1.   

    1、“html中的<>不考虑,这个是肯定要过滤的”
    恰恰这是不需要做的2、因地制宜。这是基本原则,并不存在统一的解决方案
    这也是有人提出在php6中停用magic_quotes_gpc开关的原因,但是停用后是做自动转义还是不做呢?并没有结论3、magic_quotes_gpc=on
    所有提交的数据可直接入库,而不需要做任何处理(因为特殊字符已转义)
    但是你若想在入库前对提交的数据进行预处理,那么转义后的文字将影响处理4、magic_quotes_gpc=off
    数据应在入库前做转义处理
      

  2.   

    跟在唠叨老大后面补充一点个人意见其实可以这么考虑,因为是否需要用addslashes()进行转义不是绝对的,是需要考虑到各个服务所使用的PHP版本及magic_quotes_gpc是否为ON来决定的.
    那,干脆在所有程序的入口处自己加一个开关就是了.一般现在写程序都会有一个诸如config.inc.php这样的文件存在,一般放一些基本的设置信息(如数据库名等等).一般情况下,所以文件运行之前都会载入这个文件.
    那,就在该文件里加入一个如@define("DEBUG", "ON")当然,DEBUG为ON时,就加转义,为OFF时就不加转义.类似这样.不就所以情况都可以适用了吗
      

  3.   

    莫不如自己再写个函数,入库前都用这个函数处理一下,函数的内容这样如何
    function myaddslashes($str){
    if (get_magic_quotes_gpc()){
       return $str;
    }
    else
    {
        return addslashes($str);
    }
    }
      

  4.   

    写数据库时都addslashes
    读出来时都stripslashes
      

  5.   

    谢谢大家的回答,但是我的问题还是没有解决。
    以这段代码为例:$myquery="insert into mytable (T1,T2) values ('test',' ' ')";
    $result=mysql_query($myquery);使用PHPMYADMIN打开MYSQL查看时候发现,表里面的 T2 的值是 ''(两个单引号),我觉得这和 magic_quotes_gpc设置无关吧,因为如果是被转义那么T2的值应该是 \' ,所以我怀疑MYSQL()函数本身就具备处理单引号的能力。另外,请大家举个可以危害数据库的SQL代码例子,T2在什么值下会对数据库构成威胁(注意是用''包含住的),谢谢!
      

  6.   

    经过再次测试,发现我的说法是错误的$myquery="insert into mytable (T1,T2) values ('test',' ' ')";
    $result=mysql_query($myquery);是执行不了的但是如果T2的值是通过GET或者POST的话里面含有的单引号是可以正常录入的,我设置为magic_quotes_gpc=off仍然也可以正常进行转义,这是怎么回事?难道是因为我的PHP没有重启?