So nutzen Sie den URL-Encoder und -Decoder
- Wählen Sie Kodieren oder Dekodieren.
- Wählen Sie einen Modus: Komponente für einen einzelnen Query-Wert oder ein Pfadsegment oder Vollständige URL, um die Struktur der URL (
:,/,?,&) zu erhalten. - Fügen Sie Ihren Text oder Ihre URL ein und kopieren Sie das Ergebnis.
Alles wird in Ihrem Browser verarbeitet. URLs enthalten in Query-Strings oft Tokens und personenbezogene Daten, und nichts davon wird hochgeladen oder gespeichert.
Was ist Prozentkodierung (Percent-Encoding)?
URLs dürfen nur eine begrenzte Menge an ASCII-Zeichen enthalten. Die in RFC 3986 definierte Prozentkodierung stellt jedes andere Byte als Prozentzeichen gefolgt von zwei Hexadezimalziffern dar. Text wird zunächst in UTF-8-Bytes umgewandelt, dann wird jedes Byte, das maskiert werden muss, als %XX geschrieben:
café & crème → caf%C3%A9%20%26%20cr%C3%A8me
Hier besteht é aus zwei UTF-8-Bytes (C3 A9), das Leerzeichen wird zu %20 und das kaufmännische Und zu %26.
Reservierte und nicht reservierte Zeichen
| Gruppe | Zeichen | Bedeutung |
|---|---|---|
| Nicht reserviert | A–Z a–z 0–9 - . _ ~ | Müssen nie kodiert werden. |
| Reserviert: gen-delims | : / ? # [ ] @ | Trennen die Hauptbestandteile einer URL. |
| Reserviert: sub-delims | ! $ & ' ( ) * + , ; = | Grenzen Daten innerhalb eines Bestandteils ab, etwa & und = in Query-Strings. |
Reservierte Zeichen müssen kodiert werden, wenn sie als Daten und nicht als Trennzeichen vorkommen. Eine Suche nach R&D muss als q=R%26D gesendet werden; sonst sieht der Server einen zweiten Parameter namens D.
encodeURIComponent oder encodeURI?
JavaScript bietet zwei Funktionen, und die falsche Wahl ist eine häufige Fehlerquelle:
encodeURIComponent()kodiert alles außerA–Z a–z 0–9 - _ . ! ~ * ' ( ). Verwenden Sie die Funktion für einzelne Werte: Query-Parameter, Pfadsegmente, Fragment-Daten.encodeURI()lässt zusätzlich; , / ? : @ & = + $ #unverändert. Sie lässt sich daher auf eine vollständige URL anwenden, ohne deren Struktur zu zerstören. Einen Wert, der&oder#enthält, schützt sie aber nicht.
encodeURI("https://example.com/a b?q=R&D")
// "https://example.com/a%20b?q=R&D" (& bleibt unverändert)
"https://example.com/search?q=" + encodeURIComponent("R&D")
// "https://example.com/search?q=R%26D"
Noch besser: Lassen Sie URLSearchParams oder die URL-Bibliothek Ihrer Programmiersprache die Query-Strings erstellen.
Häufige Fehlerquellen
+ oder %20
HTML-Formulare, die als application/x-www-form-urlencoded gesendet werden, kodieren ein Leerzeichen als +. In URLs nach RFC 3986 ist + ein echtes Pluszeichen und ein Leerzeichen ist %20. Ein Decoder, der nicht weiß, welche Konvention verwendet wurde, macht womöglich aus C++ ein C oder lässt + anstelle von Leerzeichen stehen. Kodieren Sie ein echtes Pluszeichen sicherheitshalber als %2B.
Python: urllib.parse.quote("a b&c") → a%20b%26c
urllib.parse.quote_plus("a b&c") → a+b%26c
Doppelte Kodierung
Wird eine bereits kodierte Zeichenkette erneut kodiert, werden die Prozentzeichen selbst maskiert: Aus %20 wird %2520. Das passiert meist, wenn ein Wert von Ihrem Code und noch einmal von einem Framework oder HTTP-Client kodiert wird. Wenn Sie %25 in einer URL sehen, liegt der Verdacht auf doppelte Kodierung nahe. Doppeltes Dekodieren schadet genauso: Es kann ein wörtliches %41 in Benutzerdaten in A verwandeln.
Die ganze URL als Komponente kodieren
Wenn Sie encodeURIComponent auf eine vollständige URL anwenden, werden :// und jeder / maskiert, und es entsteht https%3A%2F%2F.... Das ist nur richtig, wenn die URL selbst ein Parameterwert ist, etwa eine redirect_uri.
Tipps
- Bei Hexadezimalziffern in der Prozentkodierung spielt Groß- und Kleinschreibung keine Rolle, RFC 3986 empfiehlt aber Großbuchstaben (
%2F, nicht%2f). - Internationalisierte Domainnamen werden nicht prozentkodiert; sie verwenden stattdessen Punycode (
xn--). - Sie müssen Binärdaten in einer URL übertragen? URL-sicheres Base64 ist kompakter, als jedes Byte prozentzukodieren.
- Wie ein Server mit Ihrer kodierten Anfrage umgeht, sehen Sie mit dem Tool HTTP-Header prüfen.
Häufig gestellte Fragen
Warum ist ein Leerzeichen manchmal + und manchmal %20?
+ stammt aus der HTML-Formularkodierung, die in Query-Strings und POST-Bodys verwendet wird; %20 ist die allgemeine Kodierung nach RFC 3986, die überall in einer URL gültig ist. Im Zweifel verwenden Sie %20.
Welche Zeichen müssen nie kodiert werden?
Die nicht reservierten Zeichen: Buchstaben, Ziffern, Bindestrich, Punkt, Unterstrich und Tilde. Alles andere sollte kodiert werden, wenn es Teil eines Werts ist.
Ist URL-Kodierung eine Sicherheitsmaßnahme?
Nein. Sie macht Daten nur syntaktisch sicher für die Verwendung in einer URL und ist vollständig umkehrbar. Sie verbirgt keine Daten und verhindert für sich allein keine Injection-Angriffe.
Wie dekodiere ich eine URL mit %uXXXX-Sequenzen?
%uXXXX ist ein nicht standardkonformes Format, das die veraltete JavaScript-Funktion escape() erzeugt. Standard-Decoder lehnen es ab; es muss separat umgewandelt werden.
Aktualisiert