8 Stimmen

Erhalten Sie den HTTP-URL-Parameter ohne automatische Kodierung mit PHP

Ich habe eine URL wie

test.php?x=hello+world&y=%00h%00e%00l%00l%00o

wenn ich sie in eine Datei schreibe

file_put_contents('x.txt', $_GET['x']); // -->hello world
file_put_contents('y.txt', $_GET['y']); // -->\0h\0e\0l\0l\0o 

aber ich muss sie ohne Codierung in die Datei schreiben

file_put_contents('x.txt', ????); // -->hello+world
file_put_contents('y.txt', ????); // -->%00h%00e%00l%00l%00o

wie kann ich das machen?

Danke

6voto

Paul Punkte 639

Sie können uncodierte Werte aus der $_SERVER["QUERY_STRING"]-Variablen abrufen.

function getNonDecodedParameters() {
  $a = array();
  foreach (explode ("&", $_SERVER["QUERY_STRING"]) as $q) {
    $p = explode ('=', $q, 2);
    $a[$p[0]] = isset ($p[1]) ? $p[1] : '';
  }
  return $a;
}

$input = getNonDecodedParameters();
file_put_contents('x.txt', $input['x']);

5voto

Ben D Punkte 13642

Weil die Superglobals $_GET und $_REQUEST automatisch durch eine Dekodierungsfunktion (äquivalent zu urldecode()) ausgeführt werden, müssen Sie die Daten einfach erneut mit urlencode() codieren, um sie mit den Zeichen im URL-String abzugleichen:

file_put_contents('x.txt', urlencode($_GET['x'])); // -->hello+world
file_put_contents('y.txt', urlencode($_GET['y'])); // -->%00h%00e%00l%00l%00o

Ich habe dies lokal getestet und es funktioniert einwandfrei. Allerdings sollten Sie auch Ihre Codierungseinstellungen überprüfen, basierend auf Ihren Kommentaren. Wenn das Ergebnis von urlencode($_GET['y']) %5C0h%5C0e%5C0l%5C0l%5C0o ist, scheint es, dass das Nullzeichen, das Sie übergeben (%00), als wörtlicher String "\0" interpretiert wird (wie ein \-Zeichen, das an ein 0-Zeichen konkateniert ist), anstatt das \0 als einzelnes Nullzeichen korrekt zu interpretieren.

Sie sollten sich die PHP-Dokumentation zu Zeichenkodierung und ASCII-Gerätesteuerzeichen ansehen.

0voto

Kabir Punkte 2126

Ich denke, du kannst urlencode() verwenden, um den Wert in der URL zu übergeben, und urldecode(), um den Wert abzurufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X