URL kodieren, dekodieren und zerlegen
URLs kodieren, dekodieren und in ihre Teile zerlegen.
Über dieses Tool
Prozentkodiere Text für die Verwendung in einer URL, dekodiere ihn wieder oder zerlege eine vollständige URL in Protokoll, Host, Pfad, Query-Parameter und Fragment, mit jedem Parameter dekodiert.
So verwendest du es
- Wähle URL zerlegen, um einen Link in seine Teile aufzuteilen, oder Kodieren / Dekodieren für die Prozentkodierung.
- Füge eine URL oder Text ein.
- Im Modus Zerlegen siehst du Protokoll, Host, Pfad und jeden Query-Parameter bereits dekodiert.
- Kopiere jeden Teil, den du brauchst.
Fragen
- Was ist der Unterschied zwischen encodeURI und encodeURIComponent?
- encodeURIComponent escapet alles, was in einer URL eine Bedeutung hat, auch / ? & und =, also nutze es für einen einzelnen Parameterwert. encodeURI behält diese Zeichen bei, damit eine ganze URL nutzbar bleibt. Die Option Beibehalten schaltet zwischen beiden um.
- Warum ist ein Leerzeichen manchmal + und manchmal %20?
- In Query-Strings aus HTML-Formularen wird ein Leerzeichen als + geschrieben, an anderen Stellen einer URL als %20. Aktiviere „+ als Leerzeichen behandeln“, wenn du Formulardaten dekodierst.
- Was bedeutet „kaputte Prozent-Escape-Sequenz“?
- Auf ein % müssen zwei Hex-Ziffern folgen, und Multibyte-Zeichen brauchen alle ihre Bytes. Text, der mitten in einer Escape-Sequenz abgeschnitten ist, wie %E2%82, lässt sich nicht dekodieren.
- Muss der URL-Pfad anders kodiert werden als die Query?
- Größtenteils gelten dieselben Regeln, mit zwei Unterschieden. Im Pfad trennt / die Segmente, kodiere also jedes Segment einzeln, und ein Schrägstrich in einem Namen wird zu %2F. Und + ist im Pfad ein literales Plus, während formularkodierte Query-Strings es als Leerzeichen lesen.
- Wie lang darf eine URL sein?
- Die Standards setzen kein Limit, in der Praxis gibt es aber Grenzen. Browser kommen mit sehr langen URLs zurecht, Server, Proxys und CDNs begrenzen die Request-Zeile aber oft auf rund 8 KB und antworten mit 414 URI Too Long. Halte URLs unter etwa 2.000 Zeichen und schick große Datenmengen im Body eines POST.
- Ist es sicher, Tokens oder E-Mail-Adressen in eine URL zu packen?
- Lass es lieber. URLs landen in Server-Logs, Proxy-Logs, im Browserverlauf und im Referer-Header, der an andere Websites geschickt wird. Prozentkodierung verbirgt nichts, denn jeder kann sie dekodieren. Schick Tokens stattdessen in einem Authorization-Header und personenbezogene Daten im Body eines POST.
Was ist URL-Kodierung (Prozentkodierung)?
URL-Kodierung oder Prozentkodierung ersetzt Zeichen, die in einer URL nicht erlaubt sind oder eine Sonderbedeutung haben, durch ein %-Zeichen und zwei Hex-Ziffern. Ein Leerzeichen wird zu %20, & zu %26 und / zu %2F. Die Regeln stammen aus RFC 3986, der die nicht reservierten Zeichen auflistet, die nie kodiert werden müssen: ASCII-Buchstaben, Ziffern sowie - . _ ~. Alles andere muss je nach dem Teil der URL, in dem es steht, eventuell escapt werden.
Nicht-ASCII-Text wird zuerst in UTF-8-Bytes umgewandelt, und jedes Byte wird einzeln kodiert. Deshalb wird „é“ zu %C3%A9 und das Raketen-Emoji zu vier Escapes, %F0%9F%9A%80. Beim Dekodieren müssen alle Bytes eines Zeichens vorhanden sein. Dieses Tool nutzt die Standardfunktionen encodeURIComponent, encodeURI und decodeURIComponent deines Browsers, die Ergebnisse beim URL-Kodieren und -Dekodieren entsprechen also genau dem, was JavaScript-Code erzeugt.
URL zerlegen und Query-Parameter auslesen: so geht’s
Der Modus „URL zerlegen“ teilt einen Link in die Bestandteile, die der URL-Standard definiert: Protokoll, Benutzername, Host, Port, Pfad, Query, Fragment und Origin, jeweils mit eigenem Kopier-Button. Der Query-String wird in Name-Wert-Paare zerlegt, wobei jeder Wert dekodiert wird, ?q=running%20shoes erscheint also als running shoes. Kommt ein Parameter mehrfach vor, wie color=black&color=white, bekommt jedes Vorkommen eine eigene Zeile.
Der Parser braucht eine vollständige URL samt Schema, daher scheitert example.com/path, während https://example.com/path funktioniert. Ein Passwort in der URL wird in der Tabelle der Bestandteile maskiert. Im Code steht dasselbe Parsing als new URL(link) mit url.searchParams in Browsern und Node.js zur Verfügung, in Python als urllib.parse. Stammt der Link aus einem curl-Befehl, wandelt der curl Converter die ganze Anfrage in fetch oder Python um.
Warum geht meine URL kaputt? Häufige Kodierungsfehler
Der klassische Bug: eine URL durch Aneinanderhängen roher Werte zu bauen. Ein Suchbegriff wie R&D, gesendet als ?q=R&D, wird zu q=R plus einem zweiten, leeren Parameter namens D. Kodiere jeden Wert einzeln mit encodeURIComponent oder lass URLSearchParams den Query-String für dich bauen. Schick nie eine ganze URL durch encodeURIComponent, weil es auch den Doppelpunkt und die Schrägstriche escapt, die die URL zum Funktionieren braucht.
Der umgekehrte Bug ist doppeltes Kodieren. Ein zweimal kodierter Wert macht aus % ein %25, ein Leerzeichen wird also zu %2520 und lautet nach einmaligem Dekodieren immer noch %20. Siehst du %25 in einer URL, dekodiere einmal und prüfe, ob das Ergebnis noch Escapes enthält. Achte außerdem auf das Pluszeichen: In einem Query-String wird es oft als Leerzeichen gelesen, kodiere ein literales + also als %2B.
Funktioniert etwas nicht, oder sieht ein Ergebnis falsch aus? Ein Problem mit diesem Tool melden