Beliebigen Text URL-kodieren oder dekodieren
Kodiere einen Query-Wert, ein Pfadsegment oder eine ganze URL prozentweise oder wandle %XX-Folgen zurück in lesbaren Text. Beherrscht UTF-8, Leerzeichen als + im Formularstil und einen Wert pro Zeile. Nichts verlässt deinen Browser.
So kodierst oder dekodierst du Text in URLs
- Füge den Text, den Wert oder die URL in das Eingabefeld ein.
- Wähle die Kodierungsart. Für einen einzelnen Query-Wert oder ein Pfadsegment bleibt es bei Komponente. Für eine ganze Adresse, bei der nur Leerzeichen und Nicht-ASCII-Buchstaben repariert werden sollen, wähle Ganze URL. Für Daten, die als HTML-Formularübermittlung gelesen werden, wähle Formular.
- Klicke auf Kodieren oder Dekodieren. Ist Ein Wert pro Zeile gesetzt, wird jede Zeile einzeln verarbeitet, sodass du eine ganze Liste von Parametern oder URLs auf einmal umwandeln kannst.
- Kopiere das Ergebnis oder klicke auf Ergebnis als Eingabe verwenden, um es erneut zu verarbeiten, zum Beispiel um einen doppelt kodierten Wert zu entpacken.
Wenn du eine vollständige URL mit Query-String dekodierst, listet das Tool zusätzlich jeden Parameternamen und -wert im Klartext auf. Das ist der schnellste Weg, eine lange Tracking- oder Weiterleitungs-URL zu lesen.
Was Prozent-Kodierung ist
Eine URL darf nur eine begrenzte Menge ASCII-Zeichen enthalten, und mehrere davon haben Aufgaben: ? beginnt die Query, & trennt Parameter, # beginnt das Fragment, / trennt Pfadsegmente. Die Prozent-Kodierung ist der Weg, auf dem alles andere hineinkommt. Jedes Zeichen wird in seine UTF-8-Bytes umgewandelt, und jedes Byte wird als % plus zwei Hexadezimalziffern geschrieben. Ein Leerzeichen ist ein Byte und wird zu %20; é sind zwei Bytes, %C3%A9; ein Emoji wie 😀 sind vier, %F0%9F%98%80. Das Dekodieren kehrt den Vorgang um.
Die Regeln stammen aus RFC 3986, Abschnitt 2, dem Standard für die Syntax von URIs. Er empfiehlt Großbuchstaben bei den Hex-Ziffern (%3A, nicht %3a), verlangt, Text zuerst in UTF-8-Bytes zu überführen, und warnt, dass Implementierungen dieselbe Zeichenfolge nicht mehr als einmal prozentkodieren oder dekodieren dürfen.
Reservierte und unreservierte Zeichen (RFC 3986)
RFC 3986 teilt die Zeichen, die eine URL enthalten darf, in zwei Gruppen:
- Unreserviert: Buchstaben
A–Z a–z, Ziffern0–9und- . _ ~. Sie müssen nie kodiert werden und bedeuten kodiert wie unkodiert dasselbe. - Reserviert: die allgemeinen Trennzeichen
: / ? # [ ] @und die Unter-Trennzeichen! $ & ' ( ) * + , ; =. Sie können Struktur tragen. Sobald eines davon Teil deiner Daten und nicht Teil der URL-Syntax ist, muss es prozentkodiert werden.
Alles andere, darunter Leerzeichen, das % selbst, Anführungszeichen, spitze Klammern und jedes Nicht-ASCII-Zeichen, ist in einer URL so nicht erlaubt und muss immer kodiert werden. Die häufigsten:
| Zeichen | Kodiert | Warum es wichtig ist |
|---|---|---|
| Leerzeichen | %20 (oder + in Formulardaten) | In URLs überhaupt nicht erlaubt |
& | %26 | Würde einen neuen Query-Parameter beginnen |
= | %3D | Würde Parameternamen und Wert trennen |
? | %3F | Würde den Query-String beginnen |
# | %23 | Würde alles danach ins Fragment abschneiden, das nie an den Server gesendet wird |
/ | %2F | Würde ein zusätzliches Pfadsegment erzeugen |
+ | %2B | Wird in formularkodierten Query-Strings als Leerzeichen gelesen |
% | %25 | Würde als Beginn einer Escape-Folge gelesen |
: @ | %3A %40 | Trennen Schema, Zugangsdaten und Host |
é | %C3%A9 | Nicht-ASCII, kodiert als seine zwei UTF-8-Bytes |
Komponente, ganze URL, RFC 3986 oder Formular: welche Art wann
Dieselbe Eingabe wird je nach Ziel unterschiedlich kodiert. Für die Eingabe Tom & Jerry's (2024)/ü:
- Komponente ergibt
Tom%20%26%20Jerry's%20(2024)%2F%C3%BC. Das ist JavaScriptsencodeURIComponent, das alles außer Buchstaben, Ziffern und- _ . ! ~ * ' ( )kodiert. Nutze es für einen Query-Wert, ein Pfadsegment oder eine URL, die du in den Parameter einer anderen URL setzt, etwa als Weiterleitungsziel. - Striktes RFC 3986 ergibt
Tom%20%26%20Jerry%27s%20%282024%29%2F%C3%BC. Es kodiert zusätzlich! ' ( ) *, die RFC 3986 als Unter-Trennzeichen reserviert, auch wennencodeURIComponentsie in Ruhe lässt. Nutze es, wenn ein strenger Parser oder ein Verfahren zum Signieren von Anfragen genau den RFC-Zeichensatz erwartet. - Formular ergibt
Tom+%26+Jerry%27s+%282024%29%2F%C3%BC. Es folgt dem Format application/x-www-form-urlencoded des WHATWG-URL-Standards: Nur Buchstaben, Ziffern und* - . _bleiben unverändert, ein Leerzeichen wird zu+. So senden es ein HTML-Formular undURLSearchParams. - Ganze URL ergibt
Tom%20&%20Jerry's%20(2024)/%C3%BC. Das istencodeURI, das; / ? : @ & = + $ , #in Ruhe lässt, weil es annimmt, dass sie in einer vollständigen URL bereits ihre Aufgabe erfüllen. Nutze es nur, um eine ganze Adresse mit Leerzeichen oder Nicht-ASCII-Text aufzuräumen. Nie für einen Wert: Ein&in einem Wert würde stillschweigend einen neuen Parameter beginnen.
%20 oder +: Leerzeichen in URLs
Zwei Konventionen existieren nebeneinander. In der URL-Syntax von RFC 3986 ist ein Leerzeichen immer %20, und ein + ist einfach ein Pluszeichen. Im Formularformat, das Browser beim Absenden eines Formulars per GET verwenden, wird ein Leerzeichen als + geschrieben, und der WHATWG-Parser für dieses Format ersetzt vor dem Prozent-Dekodieren jedes + durch ein Leerzeichen. ?q=a+b bedeutet für einen Formulardaten-Parser also „a b“, während /a+b in einem Pfad „a+b“ bedeutet.
Deshalb hat der Dekodierer die Option + als Leerzeichen behandeln. Setze sie für Query-Strings aus Formularen, Suchfeldern und den meisten Analyse-Tools. Lass sie aus für Pfade und für Werte, in denen ein Plus echt ist, etwa eine E-Mail-Adresse wie name+tag@example.com, die als name%2Btag%40example.com kodiert wird.
Dasselbe im Code
- JavaScript:
encodeURIComponent()unddecodeURIComponent()für Werte,encodeURI()für ganze URLs undURLSearchParamsfür Query-Strings im Formularstil mit+als Leerzeichen (siehe MDN, Englisch). - Python:
urllib.parse.quote()lässt/standardmäßig unkodiert und schreibt Leerzeichen als%20, für Pfade;quote_plus()kodiert/und schreibt Leerzeichen als+, für Formularwerte (siehe die Python-Dokumentation, Englisch). - PHP:
rawurlencode()folgt RFC 3986 und schreibt Leerzeichen als%20;urlencode()schreibt Leerzeichen als+(siehe das PHP-Handbuch).
Häufige Probleme bei der URL-Kodierung
Doppelte Kodierung: %2520 statt %20
Enthält eine URL %2520, %253A oder Ähnliches, hat etwas eine bereits kodierte Zeichenfolge noch einmal kodiert; %25 ist das kodierte Prozentzeichen. Dekodiere einmal und prüfe das Ergebnis. Das Tool warnt dich, wenn ein dekodiertes Ergebnis noch Prozentfolgen enthält, und mit Ergebnis als Eingabe verwenden dekodierst du die nächste Schicht. Im Code löst du es, indem du jeden Wert genau einmal kodierst, nämlich in dem Moment, in dem du die URL zusammenbaust.
Fehler „Malformed URI sequence“
Strenge Dekodierer lehnen ein % ab, auf das keine zwei Hex-Ziffern folgen, und ebenso Bytefolgen, die kein gültiges UTF-8 sind. Dieser Dekodierer ist stattdessen nachsichtig: Er dekodiert jede gültige Folge, lässt ein einzelnes % stehen, ersetzt ungültige Bytes durch das Ersatzzeichen � und sagt dir, dass er das getan hat, damit du die kaputte Stelle findest, statt gar nichts zu bekommen.
Ein Wert, der bei # oder & abbricht
Kommt ein Parameter abgeschnitten an, enthielt der Wert ein unkodiertes # oder &, meist weil die URL per String-Verkettung oder mit der Kodierung Ganze URL zusammengesetzt wurde. Kodiere den Wert im Modus Komponente.
Eine ganze URL zu kodieren macht sie kaputt
Schickst du eine vollständige URL durch den Modus Komponente, wird aus https:// ein https%3A%2F%2F. Das stimmt nur, wenn die URL selbst ein Parameterwert in einer anderen URL ist. Kodiere sonst nur den Teil, den du einsetzt, oder nutze den Modus Ganze URL.
Verwandte URL-Tools
Baue vollständige Kampagnenlinks mit dem UTM-Generator, entferne Tracking-Parameter mit dem URL-Bereiniger oder sieh dir mit der Weiterleitungsprüfung jeden Hop eines Links an. Um ein Skript als Ein-Klick-Lesezeichen im Browser zu verpacken, kodiert der Bookmarklet-Generator es für dich. Und wenn du beim Arbeiten Referenzseiten wie den RFC speicherst: Marqly hält sie in einer durchsuchbaren Bibliothek, siehe Marqly für Entwickler (Englisch).
Häufige Fragen
Was macht URL-Kodierung?
Sie ersetzt Zeichen, die in einer URL unsicher oder mit Bedeutung belegt sind, durch ein Prozentzeichen und zwei Hexadezimalziffern für jedes UTF-8-Byte. Aus einem Leerzeichen wird %20, aus & wird %26 und aus é wird %C3%A9. So kann jeder Text innerhalb einer URL reisen, ohne mit der Struktur der URL verwechselt zu werden.
Was ist der Unterschied zwischen encodeURI und encodeURIComponent?
encodeURIComponent kodiert alles außer Buchstaben, Ziffern und - _ . ! ~ * ' ( ) und ist damit die richtige Wahl für einen einzelnen Query-Wert oder ein Pfadsegment. encodeURI lässt zusätzlich ; / ? : @ & = + $ , # unangetastet, weil es davon ausgeht, dass du eine vollständige, bereits strukturierte URL übergibst. Nutze den Modus Komponente für Werte und den Modus Ganze URL nur für komplette Adressen.
Sollte ein Leerzeichen %20 oder + sein?
Beides ist an unterschiedlichen Stellen richtig. %20 funktioniert überall in einer URL. Das Pluszeichen bedeutet nur in formularkodierten Query-Strings (application/x-www-form-urlencoded) ein Leerzeichen, so wie HTML-Formulare und URLSearchParams sie erzeugen. In einem Pfad ist ein + ein echtes Pluszeichen. Wenn du einen Query-String aus einem Formular dekodierst, setze den Haken bei + als Leerzeichen behandeln.
Warum enthält meine URL %2520?
Sie wurde zweimal kodiert. Der erste Durchgang machte aus einem Leerzeichen %20, der zweite kodierte das % selbst als %25, und es entstand %2520. Laut RFC 3986 darf dieselbe Zeichenfolge nicht mehr als einmal kodiert oder dekodiert werden. Dekodiere einmal und prüfe, ob du %20 zurückbekommst, dann dekodiere erneut.
Kann ich viele URLs auf einmal kodieren oder dekodieren?
Ja. Füge einen Wert pro Zeile ein und lass den Haken bei Ein Wert pro Zeile gesetzt. Jede Zeile wird einzeln kodiert oder dekodiert, sodass Zeilenumbrüche erhalten bleiben, statt zu %0A zu werden.
Welche Zeichen müssen kodiert werden?
Alles außerhalb der unreservierten Zeichen nach RFC 3986 (Buchstaben, Ziffern, Bindestrich, Punkt, Unterstrich, Tilde) muss kodiert werden, wenn es Teil eines Werts und nicht Teil der URL-Struktur ist. Dazu gehören Leerzeichen, Nicht-ASCII-Buchstaben wie ä, ö, ü und ß, das %-Zeichen und die reservierten Trennzeichen wie ? # & = / : @ und +.
Wird mein Text hochgeladen?
Nein. Kodieren, Dekodieren und die Aufschlüsselung des Query-Strings laufen in deinem Browser mit eingebauten JavaScript-Funktionen. Nichts wird an einen Server gesendet.





