dedlfix: urlencode: Leer- und Pluszeichen

Beitrag lesen

Hi!

Ich hab dazu was im Kontextwechsel-Artikel geschrieben. Beachte auch die Fußnote [2] hinter dem "eigentlich".

„Es gibt zwei Stellen in einer URL, die eigentlich unterschiedlich betrachtet werden müssen. Für den Querystring ist urlencode() vorgesehen und für Daten, die im Pfadteil eingefügt werden, gibt es rawurlencode(). Der Unterschied zwischen beiden Funktionen ist lediglich die Behandlung des Leerzeichens. rawurlencode() wandelt es zu %20, urlencode() hingegen in ein + (Plus).“

In RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax kann ich von dieser Unterscheidung, von der du in Bezug auf Path- und Query-Part von URLs sprichst, nichts (mehr) erkennen.

Ich gebe zu, dass ich dazu nicht die RFCs herangezogen hatte, sondern nur die Beschreibungen der Funktionen urlencode() und rawurlencode() im PHP-Handbuch. Auch weiß ich nicht mehr, was damals genau dazu geschrieben stand. Es kann gut sein, dass das damals noch nicht so deutlich auf die RFC3986 bezugnehmend beschrieben stand.

Eine Unterscheidung zwischen der Kodierung eines Leerzeichens im Path- und im Query-Bestandteil eines URIs kann ich in RFC 3986 nicht entdecken.

Sie war (und ist derzeit immer noch) in den Beispielen im PHP-Handbuch zu sehen. rawurlencode() behandelt nur Pfad-Teile (und das Passwort im FTP-Beispiel), urlencode() nur Werte für den Querystring.

Ich würde also sagen, dein „eigentlich“ im Artikel gilt eigentlich gar nicht mehr.
Wie das PHP-Manual zu urlencode auch schon sagt, sprechen höchstens noch “historical reasons” dafür, ein Leerzeichen als + zu kodieren. Dass es in freier Wildbahn noch eine Notwendigkeit dafür geben könnte, kann ich mir kaum vorstellen.

Eine Notwendigkeit sehe ich auch nicht. An der Stelle hab ich auch schon rumgefeilt. Die Fassung der Erstveröffentlichung stellt das noch deutlicher als Fehler dar, wenn man im Query-Teil nicht das + verwendet. Das muss also nochmal umformuliert werden. Wobei man die Sonderstellung des Plus aus historischen Gründen nicht untern Tisch fallen lassen darf, sonst wundert sich am Ende noch jemand, wenn sein ernst gemeintes + von einer Dekodierfunktion in Luft (ähm Leerzeichen) aufgelöst wird.

Lo!