Вопрос

Я действительно смущен здесь, может кто -нибудь мне это объяснить?

запрос: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 Hater's Club! :)

У вас, вероятно, включены волшебные цитаты. Это автоматически убегает GET, POST и DATA FOURE. Волшебные цитаты плохие и не следует полагаться на правильный избежание данных.

Если у вас есть доступ к php.ini, вы можете выключить магические цитаты.

Если вы этого не сделаете, вы можете бежать Стрипслашес На данных, чтобы удалить черты. Чтобы сделать ваш код портативным, вы должны сначала проверить get_magic_quotes_gpc() Чтобы увидеть, включено ли он, и только затем запустите Stripslashes. Таким образом, если вы перемещаете свой код на сервер, на котором выключены магические цитаты, ваш код все равно будет работать.

if(get_magic_quotes_gpc()) {
    $a = stripslashes($_GET["var"]);
}
else $a = $_GET["var"];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top