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.
Zwei Kodierungstypen decken die Fälle ab, die tatsächlich vorkommen. Die Standardkodierung nutzt encodeURIComponent aus JavaScript: Jedes Zeichen außer Buchstaben, Ziffern und - _ . ! ~ * ' ( ) wird maskiert, auch Strukturzeichen wie :, /, ?, # und &, 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, und schreibt ein Leerzeichen als + statt %20.
Wann man es einsetzt
Greif zur Standardkodierung, 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. Weil alle Strukturzeichen maskiert werden, kodiere die Teile einer Adresse einzeln – eine fertige URL zu kodieren würde auch ihre Schrägstriche und das Fragezeichen maskieren, was nur stimmt, wenn diese URL selbst ein Wert in einer anderen ist. 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 Standardkodierung 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. Eine Zusammenfassungszeile zählt, wie viele Zeichen sich geändert haben und welchen Anteil des Textes das ausmacht.
Hinweise und Randfälle
Reservierte Zeichen (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) haben innerhalb einer URL eine Bedeutung. Beide Typen maskieren : / ? # [ ] @ $ & + , ; = und lassen ! ' ( ) * unverändert, kodiere also einen Wert, bevor er in einen Query-String kommt, nicht die fertige URL. 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.