Mathe & Alltag

URL codieren und decodieren

Text oder URL einfügen und die Richtung wählen – der Encoder wandelt Sonderzeichen in Prozentcodierung um und zurück.

Ergebnis

Status
—
Länge Eingabe—
Länge Ausgabe—
Codierte Zeichen—
Längenzuwachs—
Ergebnis
—
Beim Decodieren wird ein Pluszeichen als Leerzeichen gelesen – so, wie Formulardaten übertragen werden. Steht ein echtes Pluszeichen in der URL, muss es als %2B codiert sein.

Warum URLs codiert werden

Eine Internetadresse darf nur einen begrenzten Zeichenvorrat enthalten: Buchstaben, Ziffern und eine Handvoll Sonderzeichen. Alles andere – Leerzeichen, Umlaute, kaufmännisches Und, Rautezeichen – muss umgeschrieben werden. Das Verfahren heißt Prozentcodierung und ist in RFC 3986 festgelegt: Jedes betroffene Zeichen wird in seine UTF-8-Bytes zerlegt, und jedes Byte erscheint als Prozentzeichen gefolgt von zwei Hexadezimalstellen.

Wie die Codes entstehen

Ein Leerzeichen hat den Bytewert 32, hexadezimal 20 – daraus wird %20. Das Fragezeichen mit Wert 63 wird zu %3F, das kaufmännische Und zu %26. Umlaute belegen in UTF-8 zwei Bytes: Aus „ü" wird %C3%BC, aus „ß" wird %C3%9F. Emoji brauchen sogar vier Bytes und damit zwölf Zeichen in der codierten Form. Genau deshalb wachsen codierte Adressen mit vielen Sonderzeichen erheblich – der Rechner zeigt den Zuwachs direkt an.

Ganze Adresse oder nur ein Parameterwert?

Das ist die wichtigste Entscheidung, und sie wird oft falsch getroffen. Beim Codieren einer vollständigen Adresse müssen Doppelpunkt, Schrägstrich, Fragezeichen und Und-Zeichen erhalten bleiben – sie bilden die Struktur der URL. Beim Codieren eines einzelnen Parameterwerts ist genau das Gegenteil richtig: Enthält der Wert selbst ein Und-Zeichen oder ein Gleichheitszeichen, würde die URL sonst zerbrechen, weil der Server dort einen neuen Parameter vermutet. Ein Suchbegriff wie „Zins & Tilgung" muss deshalb vollständig codiert werden, die Adresse drumherum nicht.

Der Sonderfall Pluszeichen

In Formulardaten, die als application/x-www-form-urlencoded gesendet werden, steht das Pluszeichen für ein Leerzeichen – ein Erbe aus der Frühzeit des Web. In modernen URLs gilt dagegen %20. Beide Schreibweisen begegnen nebeneinander, und beim Decodieren muss man wissen, welche gemeint ist. Der Rechner behandelt ein Pluszeichen beim Decodieren als Leerzeichen, weil das der häufigere Fall ist. Wer ein echtes Pluszeichen übertragen will – etwa in einer Telefonnummer oder E-Mail-Adresse mit Alias – muss es als %2B codieren, sonst verschwindet es unterwegs.

Reservierte und unreservierte Zeichen

Der Standard teilt den Zeichenvorrat in zwei Gruppen. Unreserviert sind Buchstaben, Ziffern sowie Bindestrich, Punkt, Unterstrich und Tilde – sie dürfen immer unverändert stehen und sollten nie codiert werden, weil eine codierte und eine uncodierte Variante sonst als unterschiedliche Adressen gelten. Reserviert sind Zeichen mit struktureller Bedeutung: Doppelpunkt, Schrägstrich, Fragezeichen, Rautezeichen, eckige Klammern, kaufmännisches Und, Gleichheitszeichen, Plus, Komma und Semikolon. Sie müssen codiert werden, sobald sie als Inhalt und nicht als Trennzeichen gemeint sind. Alle übrigen Zeichen – Leerzeichen, Anführungszeichen, spitze Klammern, Umlaute – sind in URLs schlicht unzulässig und immer zu codieren.

Punycode für Domainnamen

Der Domainteil einer Adresse folgt anderen Regeln als der Pfad. Umlautdomains werden nicht prozentcodiert, sondern nach dem Punycode-Verfahren umgeschrieben: Aus „müller.de" wird „xn--mller-kva.de". Browser zeigen die lesbare Form an und übersetzen im Hintergrund. Wer eine Adresse programmatisch zusammensetzt, sollte Domain und Pfad deshalb getrennt behandeln. Verwandte Werkzeuge sind der Base64-Umrechner und der JSON-Formatter.

Häufige Fragen

Was bedeutet %20 in einer URL?
Ein Leerzeichen. Der Bytewert 32 entspricht hexadezimal 20, weshalb daraus %20 wird. In Formulardaten steht stattdessen häufig ein Pluszeichen für dasselbe.
Wann codiere ich die ganze Adresse, wann nur einen Wert?
Die ganze Adresse, wenn Doppelpunkt, Schrägstrich und Fragezeichen als Struktur erhalten bleiben sollen. Nur den Wert, wenn er selbst Sonderzeichen wie & oder = enthält – sonst zerbricht die URL, weil der Server dort einen neuen Parameter vermutet.
Warum werden Umlaute zu zwei Codes?
Weil sie in UTF-8 zwei Bytes belegen und jedes Byte einzeln codiert wird. Aus „ü“ wird %C3%BC. Emoji brauchen vier Bytes und damit zwölf Zeichen in codierter Form.
Was mache ich mit einem echten Pluszeichen?
Als %2B codieren. Andernfalls wird es beim Empfänger möglicherweise als Leerzeichen gelesen – ein klassisches Problem bei Telefonnummern mit Ländervorwahl und E-Mail-Adressen mit Alias.
Wie werden Umlautdomains behandelt?
Nicht per Prozentcodierung, sondern über Punycode: Aus „müller.de“ wird „xn--mller-kva.de“. Der Browser zeigt die lesbare Form und übersetzt im Hintergrund – Domain und Pfad folgen also unterschiedlichen Regeln.