Question

Je suis vraiment confus ici, quelqu'un peut-il me l'expliquer?

demande: 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/>";

résultat:

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

Quelqu'un pourrait-il me expliquer non seulement pourquoi ma variable GET est transformée comme ça, mais comment je peux supprimer ce comportement, tel que mon entrée est exactement comme il a été envoyé? Je vais avoir un problème où mon emballage SQL passe par ce mysql_real_escape_string () et finit par être String\\\'s: (

Était-ce utile?

La solution

Il est appelé "citations magiques" .

Autres conseils

Vous pouvez et devrait désactiver les citations magiques.


Mode préféré les mettre hors dans php.ini


mode .htaccess ajouter à votre fichier .htaccess

php_flag magic_quotes_gpc off


Mode d'exécution 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');
}
?>


Mode d'exécution 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);
}
?>


Bienvenue au club du magic_quotes ennemi! :)

Vous avez probablement les guillemets magiques activés. Cela échappe automatiquement GET, POST et COOKIE données. Magic quotes est mauvais et ne doivent pas compter sur eux pour échapper correctement les données.

Si vous avez accès à php.ini, vous pouvez magie tour citations hors .

Si vous ne le faites pas, vous pouvez exécuter stripslashes sur les données pour supprimer les barres obliques. Afin de rendre votre code portable, vous devez d'abord vérifier get_magic_quotes_gpc() pour voir si elle est activée et ne puis exécutez stripslashes. De cette façon, si vous déplacez votre code à un serveur qui a des citations magiques est désactivé, votre code encore du travail.

if(get_magic_quotes_gpc()) {
    $a = stripslashes($_GET["var"]);
}
else $a = $_GET["var"];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top