Php 我的GET变量正在被转义?

Php 我的GET变量正在被转义?,php,apache,http,get,mysql-real-escape-string,Php,Apache,Http,Get,Mysql Real Escape String,我真的很困惑,有人能给我解释一下吗 请求: http://example.com/test.php?var=String's 有人能不能向我解释一下为什么GET变量会这样转换,以及我如何删除这种行为,使我的输入与发送时完全一致?我遇到了一个问题,我的SQL包装器通过mysql\u real\u escape\u string()将其传递,最终变成了string\\\\\\\\:(它被调用。您可以并且应该禁用魔引号 首选模式 在php.ini中设置它们 .htaccess模式 将此添加到ht

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

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


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

它被调用。

您可以并且应该禁用魔引号


首选模式
在php.ini中设置它们


.htaccess模式
将此添加到htaccess文件中


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);
}
?>


php4运行时模式

<?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
hater's club!:)

您可能已经打开了magic quotes。这会自动转义GET、POST和COOKIE数据。魔术引号是不好的,不应该依靠它来正确地转义数据

如果您有权访问php.ini,则可以

如果没有,可以在数据上运行以删除斜杠。为了使代码具有可移植性,您应该首先检查
get\u magic\u quotes\u gpc()
,查看它是否已打开,然后才运行stripslashes。通过这种方式,如果您将代码移动到关闭了magic quotes的服务器上,那么代码仍然可以工作

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

啊!我没想到。我讨厌简单的事情从我身边溜走+哇,今天早上我显然没喝咖啡。。。我的示例工作中甚至存在问题。
if(get_magic_quotes_gpc()) {
    $a = stripslashes($_GET["var"]);
}
else $a = $_GET["var"];