我在这里真的很困惑,有人可以向我解释吗?

要求: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_real_escape_string()将其传递给 String\\\'s :(

有帮助吗?

解决方案

其他提示

你可以 应该 禁用魔术报价。


更喜欢的模式
将它们放在php.ini中


.htaccess模式
将其添加到您的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');
}
?>


PHP4运行时模式

<?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 仇恨俱乐部! :)

您可能有魔术报价打开。这会自动逃脱,发布和cookie数据。魔术报价很糟糕,不应依靠适当地逃脱数据。

如果您可以访问php.ini,则可以 关闭魔术报价.

如果不这样做,可以运行 剥离 在数据上删除斜线。为了使您的代码便携式可移植,您应该首先检查 get_magic_quotes_gpc() 要查看它是否已打开,然后才能运行剥离。这样,如果将代码移至具有魔术报价的服务器,您的代码仍然可以正常工作。

if(get_magic_quotes_gpc()) {
    $a = stripslashes($_GET["var"]);
}
else $a = $_GET["var"];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top