So kodieren Sie einen String für URLs
- Tippen oder fügen Sie den Text in Text oder URL ein. Die Ausgabe wird beim Tippen aktualisiert.
- Wählen Sie unter Kodieren den Modus:
- Komponente (encodeURIComponent) für einen einzelnen Query-Wert, ein Formularfeld oder ein Pfadsegment.
- Ganze URL (encodeURI) für eine komplette URL, die Leerzeichen oder Nicht-ASCII-Zeichen enthält.
- Formulardaten (Leerzeichen als +) für Bodys vom Typ
application/x-www-form-urlencodedund Query-Strings, die so gebaut sind wie von HTML-Formularen. - Jedes Zeichen, um alle Bytes zu prozentkodieren, auch Buchstaben, zum Testen von Decodern.
- Lassen Sie Zeichensatz auf UTF-8, es sei denn, das empfangende System erwartet eine alte Kodierung.
- Aktivieren Sie Jede Zeile einzeln, um eine Liste von Werten auf einmal zu kodieren, dann Ausgabe kopieren. Tauschen schickt das Ergebnis an den Decoder, um den Hin- und Rückweg zu prüfen.
Eine ganze URL in der Eingabe wird außerdem in einer Tabelle unter den Feldern in Schema, Host, Pfad, jeden Query-Parameter und das Fragment zerlegt.
encodeURIComponent, encodeURI und Formularkodierung
Dieselbe Eingabe, a b&c=d/é?#+, in den drei gängigen Varianten:
| Modus | Ausgabe | Wofür |
|---|---|---|
Komponente (encodeURIComponent) | a%20b%26c%3Dd%2F%C3%A9%3F%23%2B | einen einzelnen Wert in einer URL |
Ganze URL (encodeURI) | a%20b&c=d/%C3%A9?#+ | eine ganze URL, die bereits korrekt aufgebaut ist |
Formulardaten (URLSearchParams) | a+b%26c%3Dd%2F%C3%A9%3F%23%2B | HTML-Formular-POSTs, viele Query-String-Bibliotheken |
Komponente lässt nur A–Z a–z 0–9 - _ . ! ~ * ' ( ) unmaskiert. Ganze URL behält zusätzlich ; / ? : @ & = + $ , #, also die Zeichen, die einer URL ihre Struktur geben, und kann deshalb keinen Wert schützen, der sie enthält. Formulardaten behält nur Buchstaben, Ziffern und - _ . * und schreibt Leerzeichen als +.
Der klassische Fehler ist, eine URL mit Ganze URL zu bauen: ?q=C++ & Go behält + und &, und der Server erhält q=C plus einen verirrten Parameter. Kodieren Sie den Wert stattdessen mit Komponente: ?q=C%2B%2B%20%26%20Go.
Leerzeichen, Pluszeichen und andere Störenfriede
| Zeichen | Kodiert | Warum es zählt |
|---|---|---|
| Leerzeichen | %20 oder + | + bedeutet nur in Query-Strings und Formular-Bodys Leerzeichen |
+ | %2B | unkodiert machen viele Server ein Leerzeichen daraus: +49 30 1234567 wird zu 49 30 1234567 |
& | %26 | beginnt einen neuen Query-Parameter |
= | %3D | trennt Name und Wert; Standard-Base64 endet damit |
/ | %2F | trennt Pfadsegmente; manche Server lehnen %2F in Pfaden ab |
# | %23 | beginnt das Fragment, das nie an den Server geht |
% | %25 | muss selbst kodiert werden, sonst liest der Decoder ein fehlerhaftes Escape |
€ | %E2%82%AC | drei UTF-8-Bytes, drei Escapes |
Base64 in einer URL ist ein häufiger Fall des Problems mit +, / und =. Prozentkodieren Sie es entweder als Komponente oder wechseln Sie zu Base64URL, das diese Zeichen vermeidet.
Zeichensätze außer UTF-8
Prozentkodierung arbeitet mit Bytes, also bestimmt der Zeichensatz das Ergebnis. é ist in UTF-8 %C3%A9 und in Windows-1252 oder ISO-8859-1 %E9. Moderne Browser und APIs verwenden UTF-8, aber ältere PHP-Anwendungen, manche Payment-Gateways und alte Intranet-Systeme erwarten noch Latin-1 oder Windows-1252, japanische Websites manchmal Shift_JIS. Wählen Sie unter Zeichensatz den passenden. Ein Zeichen, das es im gewählten Zeichensatz nicht gibt, lässt sich nicht darstellen; prüfen Sie die Ausgabe darauf.
URL-Kodierung im Code
encodeURIComponent("a b&c") // "a%20b%26c"
new URLSearchParams({ q: "C++ & Go" }).toString() // "q=C%2B%2B+%26+Go"
from urllib.parse import quote, quote_plus, urlencode
quote("/files/a b.txt") # '/files/a%20b.txt' (keeps / by default)
quote("/files/a b.txt", safe="") # '%2Ffiles%2Fa%20b.txt'
quote_plus("a b&c") # 'a+b%26c'
urlencode({"q": "C++ & Go"}) # 'q=C%2B%2B+%26+Go'
Pythons quote behält /, sofern Sie nicht safe="" übergeben, eine häufige Überraschung beim Kodieren eines Werts. Anderswo: PHPs rawurlencode liefert %20 und urlencode liefert +; Javas URLEncoder.encode ist Formularkodierung mit +; Go hat url.PathEscape (%20) und url.QueryEscape (+). encodeURIComponent lässt ! ' ( ) * unangetastet; für strikte Ausgabe nach RFC 3986 ersetzen Sie sie danach:
const strict = s => encodeURIComponent(s).replace(/[!'()*]/g,
c => "%" + c.charCodeAt(0).toString(16).toUpperCase());
Mehr zur JavaScript-Seite finden Sie auf der JavaScript-Base64-Seite. Um all das rückgängig zu machen, nutzen Sie den URL-Decoder.
Häufige Fragen
Was ist URL-Kodierung?
URL-Kodierung, auch Prozentkodierung, ersetzt Zeichen, die in einer URL nicht erlaubt sind oder eine besondere Bedeutung haben, durch % und zwei Hex-Ziffern pro Byte. Ein Leerzeichen wird zu %20, & zu %26, und é in UTF-8 zu %C3%A9.
Wie kodiere ich ein Leerzeichen in einer URL: %20 oder +?
%20 funktioniert überall. + bedeutet nur in Query-Strings und Formular-Bodys, die der Formularkodierung folgen, ein Leerzeichen; in einem Pfad ist es ein echtes Plus. Im Zweifel nehmen Sie %20.
Sollte ich die ganze URL kodieren?
Nein, kodieren Sie jeden Wert, bevor Sie ihn einsetzen. Kodieren Sie eine ganze URL mit Komponente, werden auch :, /, ? und & maskiert, und die URL bricht. Der Modus Ganze URL behält diese strukturellen Zeichen und korrigiert nur Leerzeichen und Nicht-ASCII-Text.
Warum enthält mein kodierter String %25?
%25 ist ein kodiertes Prozentzeichen. Die Eingabe war also schon kodiert und wurde ein zweites Mal kodiert: Aus a%20b wird a%2520b. Kodieren Sie Rohtext genau einmal.
Hex in Groß- oder Kleinbuchstaben bei der Prozentkodierung?
RFC 3986 behandelt %2F und %2f als gleich und empfiehlt Großbuchstaben. Aktivieren Sie Hex in Kleinbuchstaben nur, wenn Sie zu einem System passen müssen, das Kleinbuchstaben erzeugt, etwa beim Vergleich von Signaturen.