php $_POST mit Sonderzeichen


Es hat mich gewundert, warum $private_key=$_POST['pkey']; nicht funktioniert, wenn ich mit AJAX eine Variable übergebe, die u.a. ein + enthält.

Die Lösung ist erstaunlich simpel: PHP verändert Felder, die u.a die Zeichen Leerzeichen und Punkt enthalten um die Kompatibilität mit dem (veralteten) register_globals zu gewährleisten.

Es gibt dazu zahlreiche workarounds, ich verwende diese function:

function getRealPOST() {
    $pairs = explode("&", file_get_contents("php://input"));
    $vars = array();
    foreach ($pairs as $pair) {
        $nv = explode("=", $pair);
        $name = urldecode($nv[0]);
        $value = urldecode($nv[1]);
        $vars[$name] = $value;
    }
    return $vars;
}

Vielen Dank für das Veröffentlichen dieser function bei stackoverflow.com.

Wenn aber die übergebene Variable ein oder mehrere = enthält, funktioniert das ganze wegen $nv = explode("=", $pair); nicht mehr. explode muss in dem Fall auf zwei Felder limitiert werden: $nv = explode("=", $pair, 2);

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *