Dies und das

String URL-tauglich codieren/decodieren

decodierter String (z.B. "München"):

codierter String (z.B. "M%C3%BCnchen"):


(Achtung: die Länge ist begrenzt)


Worum geht es? (in einem Satz erklärt)

Ermöglicht es, u.a. Sonderzeichen so umzuwandeln, dass man sie in eine Internet-Adresse einfügen kann

Etwas genauer erklärt

Mittels einer Internet-Adresse (auch URL oder URI) kann man eine Internet-Seite aufrufen. Was passiert dabei? Es handelt sich dabei um eine Anweisung an einen Server (also einem entfernten Computer im Internet), eine Internet-Seite zurückzuliefern. Ein Beispiel wäre:


Ruft man nun diese Adresse mit einem Browser (z.B. Firefox oder Internet Explorer) auf, so wird einfach eine Datei mit der Endung "html" heruntergeladen und im Browser meist schön bunt angezeigt :-) Heutzutage verstehen die Server aber noch weitere Anweisungen: Man kann ihnen nämlich Variablen mitsenden. Zum Beispiel bei der Orte-Suche der obigen Wetter-Seite:


So weit so gut. Aber was, wenn man nach "München" suchen möchte (also mit dem Sonderzeichen "ü")? Oder noch schlimmer: man möchte als Variablen-Wert vielleicht auch mal das Fragezeichen ("?") an den Server senden. Da das Fragezeichen aber schon als spezielles Anweisungs-Zeichen vom Server verstanden wird, würde ein weiteres Fragezeichen für Verwirrung sorgen. Und Sonderzeichen, wie das "ü", kannte die Internet-Welt in ihrer Anfangs-Zeit nicht.

Die Lösung ist einfach, auch wenn sie kompliziert aussieht: Man formt nicht erlaubte Zeichen um, so dass keine verbotenen Zeichen mehr vorkommen. So gibt es dann z.B. folgende Ersetzungen:

ü ==> %C3%BC
? ==> %3F

Das ganze sieht dann zwar etwas kryptisch aus, aber der Server weiß genau, wie er das zu verstehen hat. Die Suche nach der kyrillischen Schreibweise von Moskau (also Москва) würde dann so aussehen:


Fazit

Durch das Codieren von Teilen der URL kann man Zeichen, die sonst in URLs nicht erlaubt wären, an einen Server senden. Das URL-Codieren ersetzt so gut wie alle Zeichen, die keine Buchstaben oder Zahlen sind, durch neue Zeichenketten (Hexadezimalzahlen), die mit einem Prozentzeichen beginnen. Teils gibt es unterschiedliche Verfahren. Das äußert sich z.B. in der verschiedenen Codierung des Leerzeichens: Manchmal wird es mit einem "+" und manchmal mit "%20" codiert. Ersteres geschieht entsprechend einer älteren Spezifikation. Zweiteres entspricht der Form der neueren Spezifikation "RFC 3986"

URL-Codierung mit Skript-Sprache PHP umgesetzt

Umsetzbar ist die Codierung und Decodierung mittels der PHP-Funktionen "urlencode" und "rawurlencode" bzw. "urldecode" und "rawurldecode".
 

// Ergibt: M%C3%BCnchen
echo urlencode("München");
 
// Leerzeichen nach der älteren Spezifikation
// ergibt: Der+Ball+ist+rund
echo urlencode("Der Ball ist rund");
 
// Leerzeichen nach der neueren Spezifikation RFC 3986 mit Hilfe einer anderen PHP-Funktion
// ergibt: Der%20Ball%20ist%20rund
echo rawurlencode("Der Ball ist rund");
 
 
### Und das ganze umgekehrt
// Ergibt: München
echo urldecode("M%C3%BCnchen");
 
// ergibt: Der Ball ist rund
echo urldecode("Der+Ball+ist+rund");
 
// ergibt: Der Ball ist rund
echo rawurldecode("Der%20Ball%20ist%20rund");