dedlfix: Redirect und Servervariablen (urlencoded oder nicht)

Beitrag lesen

Tach!

Wenn ich jetzt example.com/abc def&ghi aufrufe, zerschiesst mir das Ampersand ja meine $_GET["url"], bzw. kriege ich nur das, was vor dem Ampersand steht, ist auch klar.

Jein, man kann in PHP konfigurieren, welche Zeichen als Parametertrenner genommen werden sollen: arg-separator.input. Geht aber nur vor dem Scriptstart, also nicht mehr mit iniset().

Ich könnte auch auf $_SERVER["REQUEST_URI"] zurück greifen, finde da aber bei o.g. url dann "/abc%20def&ghi". Das Leerzeichen wird dann also automatisch offenbar vom FF umkodiert in %20, obwohl ich in der Adresszeile "abc def&ghi" stehen habe.

Das muss so, weil bei HTTP das Leerzeichen eine andere Bedeutung hat:

GET url HTTP/1.0

Ein Leerzeichen in der URL würde selbige beenden.

$_SERVER["REDIRECT_URL"] ist übrigens auch "/abc def&ghi" (ohne das %20).

Ja, das macht PHP für dich wieder raus. Genauer gesagt macht es ein urldecode().

Da ich das mit dem Menü (da steht dann als href="abc def&ghi") bzw. mit einem Switch (zur Anzeige des richtigen Inhaltes) abgleiche, wäre die Frage, ob ich urldecode($_SERVER["REQUEST_URI"]) nutzen sollte? Oder gibt es sonst noch Fallstricke, die zu bedenken wären?

Das & ist in HTML ein Sonderzeichen und muss als & geschrieben werden. Browser sind jedoch fehlertolerant und lassen das so durchgehen. Wenn es aber kein Parametertrenner sein soll, wäre es günstig, wenn du es, wie alle über die URL zu transportierenden Daten, url-kodieren würdest.

dedlfix.