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.