bitlvl
DE

URL kodieren / dekodieren

Kodieren Sie Text für eine URL, oder dekodieren Sie Prozent-Escapes zurück in Text. Wählen Sie den Modus passend dazu, wohin der Text geht. Fügen Sie eine vollständige URL ein, um sie in ihre Teile zu zerlegen.

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

Was Prozentkodierung tut

Eine URL darf nur eine begrenzte Menge ASCII-Zeichen enthalten, und einige davon (/, ?, &, =, #) haben strukturelle Bedeutung. Jedes andere Byte wird als Prozentzeichen und zwei Hex-Ziffern geschrieben: ein Leerzeichen ist %20, & ist %26, und die UTF-8-Bytes von é sind %C3%A9. RFC 3986 legt die Regeln fest.

Drei Modi, weil der Kontext zählt

ModusMaskiertBehältVerwenden, wenn
Query-KomponenteAlles außer A–Z a–z 0–9 - _ . ~Nur unreservierte ZeichenEin Wert in einen Query-Parameter oder ein Pfadsegment kommt: ?q=…. Entspricht encodeURIComponent.
Ganze URLLeerzeichen, Nicht-ASCII, Anführungszeichen, < >…: / ? # [ ] @ & = + $ , ;Eine vollständige URL bereinigt werden soll, ohne ihre Struktur zu zerstören. Entspricht encodeURI.
FormulardatenWie Komponente, aber Leerzeichen wird +Bodies von HTML-Formularen (application/x-www-form-urlencoded), was die meisten HTTP-Bibliotheken standardmäßig senden.

Der häufigste Fehler ist, die Ganze-URL-Kodierung auf einen Wert anzuwenden, der & oder = enthält: Der Server teilt den Parameter in zwei. Kodieren Sie Werte nach den Komponentenregeln und fügen Sie sie erst danach zusammen.

Pluszeichen

In einem Formular-Body (und per Konvention im Query-String) bedeutet + ein Leerzeichen, deshalb muss das Dekodieren von Formulardaten + in ein Leerzeichen wandeln, während ein echtes Plus als %2B gesendet worden sein muss. In einem Pfad ist + einfach ein Plus. Der Schalter + als Leerzeichen dekodieren deckt beide Fälle ab.

Doppelte Kodierung

Wenn Sie %2520 in einer URL sehen, hat etwas eine bereits kodierte Zeichenkette noch einmal kodiert: %20 wurde als Text behandelt und sein % wurde zu %25. Zweimal dekodieren stellt das Original wieder her; dann den Code reparieren, der doppelt kodiert hat.

Fragen

Was ist %20?

Ein Leerzeichen. 0x20 ist der ASCII-Code für das Leerzeichen, die Prozentkodierung schreibt es also als %20. In Formulardaten kann es stattdessen als + erscheinen.

Was ist der Unterschied zwischen encodeURI und encodeURIComponent?

encodeURIComponent maskiert jedes Zeichen, das strukturell sein könnte (einschließlich /, ?, & und =), und ist für einzelne Werte. encodeURI lässt diese in Ruhe, damit eine ganze URL eine URL bleibt. Nehmen Sie für Ersteres den Modus Query-Komponente, für Letzteres Ganze URL.

Wie werden Umlaute und andere Sonderzeichen kodiert?

Als Bytes ihrer UTF-8-Form, jedes als %XX geschrieben. é sind zwei Bytes (%C3%A9), 日 sind drei (%E6%97%A5). Ältere Systeme nutzten manchmal Latin-1, was %E9 für é ergibt; moderne Browser und APIs verwenden UTF-8.

Warum schlägt das Dekodieren bei meiner Zeichenkette fehl?

Entweder folgt auf ein % nicht zwei Hex-Ziffern (ein einzelnes Prozentzeichen muss als %25 geschrieben werden), oder die maskierten Bytes ergeben kein gültiges UTF-8. Die Fehlermeldung sagt, was zutrifft.

Soll ich die ganze URL kodieren oder nur die Parameter?

Nur die Parameter (und jedes Pfadsegment, das Benutzertext enthält). Bauen Sie die URL aus bereits kodierten Teilen zusammen, damit die Trennzeichen unmaskiert bleiben.