URL-Kodierung und Prozentkodierung verstehen
Was dieses Werkzeug macht
Eine URL kann nur eine begrenzte Menge an Zeichen sicher transportieren. Alles außerhalb der unreservierten Buchstaben, Ziffern und weniger Symbole muss als Prozentkodierung umgeschrieben werden: ein %-Zeichen gefolgt vom Bytewert in Hexadezimal. Dieses Werkzeug wandelt gewöhnlichen Text in diese kodierte Form um und führt ebenso den umgekehrten Weg aus, indem es Sequenzen wie %20 und %26 zurück in die Zeichen übersetzt, für die sie stehen.
Drei Kodiermodi decken die Fälle ab, die tatsächlich vorkommen. Die Standardkodierung entspricht encodeURI aus JavaScript und ist für eine komplette URL gedacht, deshalb bleiben Strukturzeichen wie :, /, ? und # unangetastet. Die Komponentenkodierung entspricht encodeURIComponent und maskiert auch diese Strukturzeichen, was du für einen einzelnen Teil wie einen Parameterwert brauchst. Die Formularkodierung folgt der Regel application/x-www-form-urlencoded, die der Browser beim Absenden eines Formulars verwendet.
Wann man es einsetzt
Greif zur Komponentenkodierung, sobald ein Wert in einen Query-String gehört: ein Suchbegriff, eine E-Mail-Adresse oder ein Weiterleitungsziel, das selbst ?, & oder = enthält. Durch das Kodieren werden diese Symbole nicht als URL-Struktur gelesen und der Link bleibt heil. Die Standardkodierung passt zu einer vollständigen Adresse, die du bereinigst, in die sich Leerzeichen oder Umlaute eingeschlichen haben, während Schrägstriche und Fragezeichen ihre Bedeutung behalten müssen. Die Formularkodierung passt zum Rumpf einer POST-Anfrage oder zu einer von Hand gebauten Formular-Nutzlast, bei der Leerzeichen als + statt %20 geschrieben werden. Das Dekodieren ist genauso häufig: einen kodierten Link aus einem Log, einem Analytics-Bericht oder einer Weiterleitungskette einfügen und ablesen, wohin er wirklich zeigt.
Ein konkretes Beispiel
Nimm den Text hello world & café. Bei der Komponentenkodierung wird aus einem Leerzeichen %20, aus dem Und-Zeichen %26 und aus café — weil é als zwei UTF-8-Bytes gespeichert ist — caf%C3%A9. Bei der Formularkodierung wird dasselbe Leerzeichen als + geschrieben, also hello+world. Die Live-Statistik zeigt, wie viele Zeichen sich geändert haben und welcher Anteil der Zeichenkette kodiert wurde — eine schnelle Möglichkeit, bereits einmal kodierten Text zu erkennen.
Hinweise und Randfälle
Reservierte Zeichen (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) haben innerhalb einer URL eine Bedeutung, daher lässt der Standardmodus sie bewusst unberührt, während der Komponentenmodus sie maskiert; der falsche Modus ist die übliche Ursache für einen kaputten Query-Parameter. Die Kodierung ist über UTF-8-Bytes definiert, sodass jedes Nicht-ASCII-Zeichen zu mehreren %XX-Gruppen wird. Kodiere eine URL nicht doppelt: ein einzelnes %, das bereits Teil einer Escape-Sequenz ist, wird zu %25, und der Link löst nicht mehr auf. Im Zweifel zuerst dekodieren, um zu prüfen, ob der Text roh oder schon maskiert ist.