Zum Inhalt springen

URL-Encoder & -Decoder

URLs und Query-Strings kodieren und dekodieren: als Wert (encodeURIComponent) oder ganze URL (encodeURI). Teilt URLs in Protokoll, Host, Pfad, Query-Parameter.

Richtung
0 Zeichen · 0 Zeilen
Kodierungsart
encodeURIComponent maskiert auch sämtliche URL-Trennzeichen wie /, ?, & und #. Verwende es für den Wert eines einzelnen Query-Parameters. encodeURI lässt diese Trennzeichen unverändert und maskiert nur den Rest – dafür ist es für eine komplette URL gedacht. Beispiel: „a b/c?d“ → „Einzelner Wert“ ergibt „a%20b%2Fc%3Fd“, „Ganze URL“ ergibt „a%20b/c?d“.

0 Zeichen · 0 Zeilen

URL-Struktur analysieren

URL-Struktur analysieren

Gib eine vollständige URL ein, um sie in Protokoll, Host, Pfad und Query-Parameter aufgeteilt zu sehen.

https://example.com/path?query=1&lang=ko

Deine Eingaben werden nur in diesem Browser verarbeitet und nie an einen Server gesendet. So funktioniert es

URL-Kodierung und Dekodierung zwischen hello world und hello%20world

Zwei Werkzeuge auf einer Seite

Auf dieser Seite stecken zwei Werkzeuge. Das obere kodiert oder dekodiert eine Zeichenkette, das untere, „URL-Struktur analysieren“, zerlegt eine vollständige URL in ihre Bestandteile. Die beiden beeinflussen einander nicht.

Im oberen wählst du unter „Richtung“ zwischen „Kodieren“ und „Dekodieren“ und legst dann zwei Dinge fest.

  • Kodierungsart: „Einzelner Wert“ ist für ein Stück gedacht, das in eine URL eingesetzt wird, etwa den Wert eines Query-Parameters. „Ganze URL“ ist für eine Zeichenkette, die schon die Form einer Adresse hat. Worin sich beide unterscheiden, steht im nächsten Abschnitt.
  • + als Leerzeichen (application/x-www-form-urlencoded): Schalte das nur ein, wenn du mit Daten arbeitest, die ein HTML-Formular sendet.

Beim Kodieren heißen die beiden Felder „Ausgangstext“ und „Kodiertes Ergebnis“, beim Dekodieren „Kodierte Zeichenkette“ und „Dekodiertes Ergebnis“. Aus € wird beim Kodieren %E2%82%AC. Das Zeichen belegt in UTF-8 3 Bytes und wird deshalb zu drei %XX. „Ins Dekodieren-Feld übernehmen“ und „Ins Kodieren-Feld übernehmen“ schieben das eben erzeugte Ergebnis als Eingabe in die Gegenrichtung.

„Einzelner Wert“ und „Ganze URL“ lassen unterschiedliche Zeichen stehen

Beide Arten ersetzen Zeichen, die in einer URL nicht unverändert stehen dürfen, durch % und zwei Hexadezimalziffern (Prozent-Kodierung). Der Unterschied liegt darin, was mit Zeichen wie /, ? und & geschieht, die eine URL gliedern. „Einzelner Wert“ liefert dasselbe wie encodeURIComponent in JavaScript, „Ganze URL“ dasselbe wie encodeURI.

Kodierungsart Zeichen, die unverändert bleiben
Einzelner Wert ASCII-Buchstaben, Ziffern, - _ . ! ~ * ' ( )
Ganze URL alle Zeichen von oben und zusätzlich ; / ? : @ & = + $ , #

Dieselbe Eingabe https://example.com/café?q=crème brûlée&page=1#menü fällt je nach Art so aus:

  • Ganze URL: https://example.com/caf%C3%A9?q=cr%C3%A8me%20br%C3%BBl%C3%A9e&page=1#men%C3%BC
  • Einzelner Wert: https%3A%2F%2Fexample.com%2Fcaf%C3%A9%3Fq%3Dcr%C3%A8me%20br%C3%BBl%C3%A9e%26page%3D1%23men%C3%BC

Das erste Ergebnis funktioniert direkt als Adresse. Das zweite taugt nicht mehr als Adresse, lässt sich dafür aber als Ganzes in den Parameterwert einer anderen URL setzen (?redirect=...). Umgekehrt: Soll der Suchbegriff a/b&c als Query-Wert in eine URL und du nimmst „Ganze URL“, bleibt das & stehen und wird als Beginn des nächsten Parameters gelesen. Hier brauchst du „Einzelner Wert“, das ergibt a%2Fb%26c.

Beim Dekodieren gibt es denselben Unterschied. Mit „Ganze URL“ bleibt die Kodierung der gliedernden Zeichen bestehen. Aus a%2Fb%3Fc%26d%23e%20f macht „Einzelner Wert“ a/b?c&d#e f, „Ganze URL“ dagegen a%2Fb%3Fc%26d%23e f. Steht nach dem Dekodieren noch %2F oder %26 im Ergebnis, stell die Kodierungsart auf „Einzelner Wert“ um.

Merk dir außerdem, dass ! ' ( ) * auch bei „Einzelner Wert“ unverändert bleiben. Verlangt ein Server, dass selbst diese Zeichen kodiert sind, musst du sie im Ergebnis von Hand durch %21, %27, %28, %29 und %2A ersetzen.

+ als Leerzeichen

Daten, die ein HTML-<form> sendet (application/x-www-form-urlencoded), schreiben ein Leerzeichen nicht als %20, sondern als +. Schalte „+ als Leerzeichen“ ein, wenn du dieses Format erzeugen oder lesen willst.

Richtung Eingabe Option aus Option an
Kodieren (Einzelner Wert) a+b c a%2Bb%20c a%2Bb+c
Kodieren (Ganze URL) a+b c a+b%20c a%2Bb+c
Dekodieren (Einzelner Wert) a+b%2Bc a+b+c a b+c

Mit eingeschalteter Option wird ein +, das schon im Ausgangstext stand, zu %2B, damit es nicht mit einem Leerzeichen verwechselt wird. „Ganze URL“ lässt ein + normalerweise stehen, ersetzt es mit dieser Option aber genauso durch %2B. Beim Dekodieren ohne die Option ist ein + einfach ein +. Hast du einen Wert wie q=crème+brûlée aus der Adresse einer Suchergebnisseite kopiert und nach dem Dekodieren steht das + immer noch da, ist das ein Fall für diese Option. In URL-Pfaden und Dateinamen bedeutet + kein Leerzeichen, lass sie dort ausgeschaltet.

Was „URL-Struktur analysieren“ anzeigt

Gibst du in das Feld „Vollständige URL“ eine vollständige URL ein, die mit einem Protokoll wie https:// beginnt, erscheinen „Protokoll“, „Host“ und „Pfad“ und, sofern vorhanden, zusätzlich „Query-String“ und „Hash“. In der Tabelle darunter steht jeder Query-Parameter mit „Schlüssel“ und „Wert (dekodiert)“ in einer eigenen Zeile. Fehlt das Protokoll wie bei example.com/path, heißt es „Das ist keine vollständige URL mit Protokoll (wie https://).“

Angezeigt wird nicht die Eingabe Zeichen für Zeichen, sondern das, was der Browser nach dem Parsen und Aufräumen der URL daraus gemacht hat. Für https://Example.COM:443/a/../b/café?q=hello%20world&tag=a&tag=b&x=1+2#top sieht das so aus:

Feld Angezeigter Wert Unterschied zur Eingabe
Protokoll https
Host example.com kleingeschrieben, und der Standardport 443 von https fällt weg
Pfad /b/caf%C3%A9 /a/.. ist aufgelöst, und das é erscheint in kodierter Form
Query-String ?q=hello%20world&tag=a&tag=b&x=1+2 wie eingegeben
Hash #top

Die Tabelle enthält vier Zeilen: q = hello world, tag = a, tag = b, x = 1 2. Kommt ein Schlüssel mehrfach vor, gibt es auch mehrere Zeilen. Am Wert von x siehst du, dass diese Tabelle ein + immer als Leerzeichen liest, egal wie das Kontrollkästchen „+ als Leerzeichen“ oben steht. So verlangt es der URL-Standard: Ein Query-String wird im Format von Formulardaten ausgewertet.

Zwei Dinge noch. Domains mit Nicht-ASCII-Zeichen stehen unter „Host“ in Punycode (https://café.example/ → xn--caf-dma.example). Und enthält die Adresse Benutzername und Passwort wie in http://user:pw@host:8080/p, taucht dieser Teil in keinem Feld auf. Unter „Host“ steht nur host:8080.

Eingaben, an denen das Dekodieren scheitert

Das Dekodieren gelingt nur, wenn auf jedes % zwei Hexadezimalziffern folgen und die so entstandenen Bytes gültige UTF-8-Zeichen ergeben. Passt auch nur eine Stelle nicht, gibt es kein Ergebnis, sondern eine Meldung, die mit „Die Prozent-Kodierung ist nicht gültig.“ beginnt.

Eingabe Warum es scheitert
100% Auf das % folgt nichts. Das Prozentzeichen selbst muss als %25 geschrieben werden
%zz zz ist keine Hexadezimalzahl
%E2%82 Vom Zeichen € (%E2%82%AC), das aus 3 Bytes besteht, fehlt das letzte Byte. Das passiert, wenn eine lange Adresse beim Kopieren mittendrin abgeschnitten wird

Das Kodieren scheitert nie. Auch eine Eingabe, die für sich kein Zeichen ergibt, etwa ein halbes Emoji, wird ohne Fehler kodiert, und zwar als Ersatzzeichen (%EF%BF%BD).

Quellen

Häufige Fragen

Was passiert, wenn ich eine bereits kodierte Zeichenkette noch einmal kodiere?

Aus jedem % wird %25, die Zeichenkette ist dann doppelt kodiert. Kodierst du %20 mit „Einzelner Wert“, kommt %2520 heraus, und einmaliges Dekodieren liefert kein Leerzeichen, sondern wieder %20. Taucht in einer Adresse mehrfach %25 auf oder steht nach dem Dekodieren immer noch %XX im Ergebnis, wurde irgendwo zweimal kodiert. Dekodiere so oft, bis der ursprüngliche Text erscheint. Mit „Ins Dekodieren-Feld übernehmen“ geht das ohne Umkopieren.

Eine Zeichenkette wie caf%E9 aus der Adresse einer alten Website lässt sich nicht dekodieren.

Die Adresse wurde mit einer anderen Zeichenkodierung als UTF-8 erzeugt. Dieses Tool deutet die als %XX geschriebenen Bytes ausschließlich als UTF-8 und meldet eine Bytefolge, die kein gültiges UTF-8 ergibt, als ungültige Prozent-Kodierung. Denselben Fehler gibt es bei der veralteten Schreibweise mit %u, etwa %u00e9. Solche Zeichenketten kann dieses Tool nicht zurückverwandeln.

Gibt es einen Fehler, wenn ich unter „URL-Struktur analysieren“ eine URL mit kaputter Prozent-Kodierung eingebe?

Nein. Das Dekodieren im oberen Teil verwirft die gesamte Eingabe, sobald auch nur ein % fehlerhaft ist. „URL-Struktur analysieren“ liest dagegen, soweit es geht. Bei https://example.com/?q=%zz&r=%E2%82 steht als Wert von q unverändert %zz und als Wert von r das Ersatzzeichen für ein kaputtes Zeichen (�). Bytes, die sich nicht als UTF-8 lesen lassen, können als dieses Zeichen erscheinen. Prüfe, ob der Wert abgeschnitten wurde oder eine andere Zeichenkodierung verwendet. Das Zeichen kann auch schon im Original stehen; allein daran lässt sich die Ursache nicht erkennen.

Zuletzt aktualisiert: