Was die Prozentkodierung macht
URLs erlauben nur einen begrenzten Zeichenvorrat. Alles andere wird in UTF-8-Bytes umgewandelt, und jedes Byte wird als Prozentzeichen plus zwei Hex-Ziffern geschrieben. Ein Leerzeichen wird zu %20, é zu %C3%A9, und ein chinesisches, japanisches oder koreanisches Zeichen wird, weil es drei Bytes umfasst, zu neun Zeichen.
Dieses Werkzeug unterscheidet zwischen der Kodierung einer ganzen Adresse und der eines einzelnen Werts. In einer ganzen Adresse müssen die Strukturzeichen wie Schrägstriche und Fragezeichen erhalten bleiben; in einem einzelnen Wert – etwa einem Suchbegriff – müssen genau diese Zeichen ebenfalls kodiert werden, sonst zerfällt der Parameter.
Die Dekodierung läuft in die Gegenrichtung: Jedes Prozent-Triplett wird wieder zu einem Byte, und das Ergebnis wird als UTF-8 gelesen. Am häufigsten nutzt man das, um einen ursprünglichen Suchbegriff aus einer Adresse zurückzugewinnen, die in einem Log oder als Referrer aufgezeichnet wurde.
Den falschen Kodierungsumfang wählen
Wer einen einzelnen Wert so kodiert, als wäre er eine ganze Adresse, schneidet den Parameter ab. Enthält ein Suchbegriff ein kaufmännisches Und, das unverändert bleibt, liest der Server dort einen neuen Parameter. Werte in der Query brauchen die Kodierung auf Komponentenebene.
Auch umgekehrt geht es schief: Wer eine ganze Adresse auf Komponentenebene kodiert, schreibt Schrägstriche und Doppelpunkt um, und der Link öffnet sich nicht mehr. Die Komponentenkodierung ist richtig, wenn eine fertige URL als Parameter in einer anderen URL transportiert wird, und falsch, wenn das Ergebnis direkt in die Adressleiste kommt.
Wer eine bereits kodierte Zeichenkette ein zweites Mal kodiert, macht aus jedem Prozentzeichen %25 und erzeugt so eine doppelte Schicht. Tauchen in der Ausgabe mehrfach %25 auf, ist fast immer genau das passiert, und um das Original zurückzubekommen, sind dann zwei Dekodierdurchgänge nötig.