代码之家  ›  专栏  ›  技术社区  ›  Incognito

我的GET变量正在转义?

  •  4
  • Incognito  · 技术社区  · 14 年前

    我真的很困惑,有人能给我解释一下吗?

    请求: http://example.com/test.php?var=String's

    $a = $_GET["var"];
    $b = "String's";
    
    echo $a . "<br/>";
    echo $b . "<br/>";
    
    $output = mysql_real_escape_string($a);
    $output = mysql_real_escape_string($b);
    echo "<hr/>";
    echo $a . "<br/>";
    echo $b . "<br/>";
    

    结果:

    String\'s
    String's
    ----------------
    String\'s
    String's
    

    有人能不能解释一下,为什么GET变量被这样转换,以及我如何删除这个行为,使我的输入与发送时完全一致?我遇到了一个问题,我的SQL包装器通过mysql\u real\u escape\u string()将其传递给 String\\\'s :(

    3 回复  |  直到 14 年前
        1
  •  6
  •   user395760 user395760    14 年前
        2
  •  2
  •   Frankie    13 年前

    而且应该


    首选模式
    把他们放进去php.ini文件



    将此添加到htaccess文件

    php_flag magic_quotes_gpc off
    


    php5运行时模式

    <?php
    if (get_magic_quotes_gpc()) {
        function stripslashes_gpc(&$value)
        {
            $value = stripslashes($value);
        }
        array_walk_recursive($_GET, 'stripslashes_gpc');
        array_walk_recursive($_POST, 'stripslashes_gpc');
        array_walk_recursive($_COOKIE, 'stripslashes_gpc');
        array_walk_recursive($_REQUEST, 'stripslashes_gpc');
    }
    ?>
    


    <?php
    if (get_magic_quotes_gpc()) {
        $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
        while (list($key, $val) = each($process)) {
            foreach ($val as $k => $v) {
                unset($process[$key][$k]);
                if (is_array($v)) {
                    $process[$key][stripslashes($k)] = $v;
                    $process[] = &$process[$key][stripslashes($k)];
                } else {
                    $process[$key][stripslashes($k)] = stripslashes($v);
                }
            }
        }
        unset($process);
    }
    ?>
    


    欢迎来到 magic_quotes

        3
  •  0
  •   Rupert Madden-Abbott    14 年前

    你可能打开了魔法引号。这会自动转义GET、POST和COOKIE数据。魔术引号是不好的,不应该依赖于正确转义数据。

    如果你有权php.ini文件,你可以 turn magic quotes off .

    如果你不,你可以跑 stripslashes 在数据上删除斜杠。为了使您的代码可移植,您应该首先检查 get_magic_quotes_gpc()

    if(get_magic_quotes_gpc()) {
        $a = stripslashes($_GET["var"]);
    }
    else $a = $_GET["var"];