URL Encoding mit PHP nach RFC 1738
URL Encoding ist mit den Bordmitteln von PHP relativ einfach umzusetzen. Es reicht der richtige Einsatz der Methoden rawurlencode, rawurldecode, urlencode und urldecode. Trotzdem möchte ich hier ein wenig die Hintergründe beleuchten.
Am Anfang stand die “RFC 1738″ (Uniform Resource Locators (URL) specification). In diesem Dokument ist der Korrekte Aufbau eines URLs beschrieben. Z.B. dass in Ordnern und Dateinamen statt einem Leerzeichen ein “ ″ im URL stehen muss.
In HTML Dokumenten müssen die Attribute der folgenden HTML-Tags nach RFC 1738 codiert werden. (A, APPLET, AREA, BASE, BGSOUND, BODY, EMBED, FORM, FRAME, IFRAME, ILAYER, IMG, OBJECT, SCRIPT, SOUND)
Die RFC 1738 Spezifikation sieht eine Kodierung aller Zeichen mit Ausnahme von 0-9, a-z, A-Z und “$-_.+!*’() vor. Alle anderen Zeichen sind als “Reservierte Zeichen” definiert und müssen daher bei der Verwendung mit einer der PHP Methoden (rawurlencode, urlencode) umgewandelt werden.
Beim Umwandeln von Zeichen in einem URL werden die ungültigen Sonderzeichen einfach in ihren Hex Code aufgelöst und dann mit einem % Zeichen versehen. Im Falle eines Leerzeichens währe es ein “ ″. Das hört sich erst mal einfach an, aber eine wichtige Information habe ich bisher noch unterschlagen. In URLs ist es leider so, dass die Methode zum codieren und decodieren abhängig davon ist an welcher Stelle im URL man sich befindet. Beispiel:
Aus dem URL http://www.testserver.de/mein verzeichnis/meine datei.php?name=Michael Jentsch wird nach einer erfolgreichen Kodierung der URL http://www.testserver.de/mein verzeichnis/meine datei.php?name=Michael+Jentsch
Auffällig hierbei ist das + Zeichen statt dem “ ″ zwischen Michael und Jentsch. Genaugenommen könnte man hier auch ein einfügen, aber ein Browser würde hier immer ein + Zeichen verwenden. Um dies nachahmen zu können muss man die beiden Methoden rawurlencode und urlencode verwenden.
Die Methode urlencode halt hier nicht an das im RFC 1738 beschriebenen Verfahren.
So könnte beispielsweise der PHP Code aussehen um einen URL zu codieren.
$part1 = “www.testserver.de/mein verzeichnis/meine datei.php”;
$part2 = “name=Michael Jentsch”;
$url = “http://” .rawurlencode ($part1) . “?” . urlencode($part2);
rawurlencode
Verfügbar in PHP 3, PHP 4 und PHP 5
Beschreibung:
string rawurlencode ( string str ) // URL-Kodierung nach RFC 1738
Diese Methode realisiert die Kodierung nach RFC 1738.
Link: http://php.net/manual/de/function.rawurlencode.php
rawurldecode
Verfügbar in PHP 3, PHP 4 und PHP 5
Beschreibung:
string rawurldecode ( string str ) // URL-Dekodierung nach RFC 1738
Diese Methode realisiert die Dekodierung nach RFC 1738.
Link: http://php.net/manual/de/function.rawurldecode.php
urlencode
Verfügbar in PHP 3, PHP 4 , PHP 5
Beschreibung:
string urlencode ( string str ) // URL Kodierung von Strings.
Diese Methode entspricht der Methode rawurlencode mit Ausnahme eines Zeichens. Das Leerzeichen wird nicht nach umgewandelt, sondern in ein + Zeichen. Diese Methode entspricht der Kodierung wie sie vom Browser verwendet wird, wenn Daten in einem Formular gesendet werden und mit application/x-www-form-urlencoded kodiert werden.
urldecode
Verfügbar in PHP 3, PHP 4 und PHP 5
Beschreibung:
string urldecode ( string str ) // URL Dekodierung von Strings.
Dekodiert jede %## Kodierung eines Strings und das Plus Zeichen. Der dekodierte String wird als Return Wert zurückgegeben.
Weiterführende Themen: