Frage

Ich bin hier wirklich verwirrt, kann jemand mir dies erklären?

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

Ergebnis:

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

Könnte mir jemand erklären, nicht nur, warum mein GET-Variable wird wie folgt transformiert wird, aber wie ich dieses Verhalten entfernen kann, so dass meine Eingabe genau, wie sie gesendet wurde? Ich habe ein Problem, wo mein SQL-Wrapper dies geht durch mysql_real_escape_string () und endet als String\\\'s: (

War es hilfreich?

Lösung

Es heißt "magic quotes" .

Andere Tipps

Sie können und sollte deaktivieren magic quotes.


Beliebten Modus
setzt sie in php.ini

off


.htaccess-Modus
fügen Sie diese zu Ihrer .htaccess-Datei

php_flag magic_quotes_gpc off


php5 Runtime-Modus

<?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 Runtime-Modus

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


Willkommen in der Club-magic_quotes Hasser! :)

Sie haben wahrscheinlich magic quotes eingeschaltet. Dieser entweicht automatisch GET, POST und COOKIE-Daten. Magic Quotes ist schlecht und sollte sich nicht darauf verlassen, um richtig Daten zu entkommen.

Wenn Sie den Zugriff auf die Datei php.ini haben, können Sie wiederum Magie Zitate aus .

Wenn Sie nicht tun, können Sie laufen strip auf die Daten, die Schrägstriche zu entfernen. Um Ihren Code portabel zu machen, sollen Sie zunächst get_magic_quotes_gpc() überprüfen, um zu sehen, ob es auf und nur dann eingeschaltet wird, dann läuft strip. Auf diese Weise, wenn Sie Ihren Code auf einen Server verschieben, Magic Quotes ausgeschaltet hat, Ihr Code wird immer noch funktionieren.

if(get_magic_quotes_gpc()) {
    $a = stripslashes($_GET["var"]);
}
else $a = $_GET["var"];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top