Kodierung

URL-Kodierung (Prozentkodierung) erklärt: Warum aus Text %20 und %C3%BC wird

Kopieren Sie einen Link mit einem Wort wie „Größe“, erhalten Sie Zeichenketten wie Gr%C3%B6%C3%9Fe. Das ist URL-Kodierung. Dieser Leitfaden erklärt die Regeln dahinter und die Probleme, die sie in der Webentwicklung, bei Marketing-Links und API-Integrationen verursacht.

In einer URL sind nur bestimmte Zeichen erlaubt

Die URL-Syntax ist in RFC 3986 festgelegt. Nur Buchstaben, Ziffern und vier Symbole — Bindestrich (-), Punkt (.), Unterstrich (_) und Tilde (~) — dürfen unverändert in einer URL stehen. Man nennt sie nicht reservierte Zeichen.

Symbole wie :, /, ?, #, & und = sind reserviert: Sie geben einer URL ihre Struktur. ? leitet den Query-String ein, & trennt Parameter und # markiert ein Fragment. Enthält ein Suchbegriff selbst & oder #, verändert das unkodierte Einfügen die Bedeutung der gesamten URL.

So funktioniert Prozentkodierung

Zeichen, die nicht direkt erscheinen dürfen, werden in Bytes zerlegt, und jedes Byte wird als % gefolgt von zwei Hexadezimalziffern geschrieben. Ein Leerzeichen (Byte 0x20) wird zu %20, ein Kaufmanns-Und (0x26) zu %26 und ein Gleichheitszeichen (0x3D) zu %3D.

Nicht-ASCII-Text wird zuerst in UTF-8-Bytes umgewandelt und dann genauso kodiert. Die koreanische Silbe 안 belegt in UTF-8 drei Bytes (EC 95 88) und wird daher zu %EC%95%88 — aus einem Zeichen werden neun. Das deutsche ü mit zwei Bytes wird zu %C3%BC.

안녕 하세요?  →  %EC%95%88%EB%85%95%20%ED%95%98%EC%84%B8%EC%9A%94%3F
a b&c=d      →  a%20b%26c%3Dd

Beim Dekodieren läuft der Vorgang rückwärts: %EC%95%88 wird wieder zu den Bytes EC 95 88, die als UTF-8 interpretiert werden. Interpretiert ein Server diese Bytes stattdessen in einer älteren Kodierung, entsteht Zeichensalat — eine häufige Ursache für kaputte Suchbegriffe auf älteren Websites.

Ist ein Leerzeichen %20 oder +?

Leerzeichen sorgen für die meiste Verwirrung. Nach RFC 3986 ist ein Leerzeichen %20. Das von HTML-Formularen verwendete Format application/x-www-form-urlencoded schreibt Leerzeichen im Query-String jedoch als +. Derselbe Text a b kann daher im Pfad als a%20b und in einer Formularabfrage als a+b erscheinen.

Schwierig wird es, wenn Sie ein echtes Pluszeichen brauchen. Eine Telefonnummer wie +49 oder ein Ausdruck wie 1+1, unkodiert in eine Abfrage gesetzt, kann als Leerzeichen gelesen werden. Kodieren Sie solche Werte als %2B. Bibliotheken verhalten sich unterschiedlich — encodeURIComponent in JavaScript erzeugt %20, manche Serverbibliotheken erzeugen + —, stellen Sie also sicher, dass beide Seiten dieselbe Konvention nutzen.

Bestandteile kodieren, nicht ganze URLs

Kodieren Sie niemals eine ganze URL auf einmal. Wer https://example.com/search?q=... komplett kodiert, verwandelt : und / in %3A und %2F, und das Ergebnis funktioniert nicht mehr als Adresse. Wenden Sie die Kodierung nur auf die Teile an, die Daten sind, etwa Parameterwerte.

JavaScript bildet das mit zwei Funktionen ab. encodeURI lässt strukturelle Zeichen unverändert, während encodeURIComponent auch /, ?, & und = kodiert. Für Werte von Query-Parametern ist encodeURIComponent die sichere Wahl.

Doppelte Kodierung: Vorsicht bei %2520

Kodiert man eine bereits kodierte Zeichenkette erneut, wird aus % ein %25. Erscheint ein Leerzeichen als %2520 statt %20, wurde es zweimal kodiert. Das passiert häufig bei Tracking-Links, die mehrere Weiterleitungen durchlaufen, oder bei Rücksprung-URLs nach dem Login, die eine weitere URL als Parameter tragen.

Doppeltes Dekodieren ist genauso schädlich: Ein echtes %25 in den Daten wird zu %, und der Wert ändert sich. Die Regel ist einfach: einmal kodieren, im letzten Moment, wenn ein Wert in eine URL kommt, und einmal dekodieren, im ersten Moment, wenn Sie ihn lesen.

Praktische Checkliste

Probieren Sie Werte im URL-Encoder/Decoder von AIBIZAP aus, um genau zu sehen, welche Zeichen sich wie verändern.

  • Kodieren Sie Kampagnennamen in UTM-Links, wenn sie Leerzeichen oder Umlaute enthalten.
  • Kodieren Sie API-Werte wie Suchbegriffe, E-Mail-Adressen (mit @) und Zeitstempel (mit :) auf Ebene der Bestandteile.
  • Wenn ein Link kaputt ist, suchen Sie nach %25, um doppelte Kodierung zu erkennen.
  • Zeigen Server-Logs Zeichensalat, prüfen Sie, ob die Werte als UTF-8 dekodiert und interpretiert wurden.
  • Muss ein Base64-Wert in eine URL, verwenden Sie Base64URL oder prozentkodieren Sie das Ergebnis.

Mit diesen Tools ausprobieren

Weitere Ratgeber

Alle Ratgeber