Codiere und decodiere URLs und Abfragezeichenfolgen mit Prozent-Codierung. Wähle Komponenten-, volle-URI- oder Formulardaten-Modus und konvertiere in beiden Richtungen während des Tippens.
Text für URLs prozent-codieren oder zurück decodieren. Gib in eines der Felder ein und das andere aktualisiert sich sofort. Wähle den Modus, der passt, wo der Wert verwendet wird: ein einzelner Abfrageparameter, eine ganze URL oder eine HTML-Formularübermittlung.
Prozent-Codierung, richtig erklärt
Warum URLs überhaupt Codierung brauchen
Eine URL ist kein freier Text. Zeichen wie ?, #, &, / und = sind reserviert: sie tragen strukturelle Bedeutung, markieren, wo der Pfad endet und die Abfrage beginnt, oder trennen einen Parameter vom nächsten. Wenn ein Wert, den du übermitteln willst, zufällig eines dieser Zeichen enthält, wird der Parser am anderen Ende deine URL falsch lesen. Prozent-Codierung löst das, indem sie das störende Byte durch ein % gefolgt von seinem zweistelligen Hexadezimalwert ersetzt, sodass ein & innerhalb eines Werts als %26 reist und nie für einen Trenner gehalten werden kann.
Unreserved, reserved und der Rest
RFC 3986 teilt den Zeichenraum in drei Gruppen.
Unreserved — A-Z a-z 0-9 - . _ ~. Diese müssen nie codiert werden und sollten in Ruhe gelassen werden. Sie trotzdem zu codieren ist legal, erzeugt aber hässlichere URLs und kann naive Zeichenkettenvergleiche brechen.
Reserved — : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Diese sind nur dort sicher, wo sie strukturell gemeint sind. Innerhalb eines Werts müssen sie codiert werden.
Alles andere — Leerzeichen, Steuerzeichen und jeder nicht-ASCII-Text. Diese erfordern immer Codierung.
Nicht-ASCII-Text und UTF-8
Prozent-Codierung arbeitet auf Bytes, nicht auf Zeichen, sodass der Text zuerst in Bytes umgewandelt werden muss. Die moderne Antwort ist immer UTF-8. Ein €-Zeichen sind drei Bytes in UTF-8 (E2 82 AC), also codiert es zu %E2%82%AC. Ältere Systeme nutzten manchmal den eigenen Zeichensatz der Seite, weshalb man gelegentlich noch eine Mojibake-URL trifft, die als Latin-1 oder GBK codiert ist. Dieses Werkzeug verwendet durchgehend UTF-8, passend zu dem, was Browser und jedes aktuelle Server-Framework erwarten.
Die drei Modi, und wann jeder falsch ist
encodeURIComponent ist die sichere Voreinstellung und escaped alle reservierten Zeichen. Verwende es immer, wenn du einen Wert in eine URL einfügst. encodeURI bewahrt bewusst reservierte Zeichen, sodass eine komplette URL intakt bleibt — verwende es nur, um eine bereits zusammengebaute URL aufzuräumen, nie auf einem einzelnen Parameter, weil es ein & in deinem Wert fröhlich stehen lässt und die Abfragezeichenfolge verfälscht.
Der Form-Modus ist der Außenseiter. Die Serialisierung application/x-www-form-urlencoded, die älter ist als die modernen URL-Spezifikationen, codiert ein Leerzeichen als + statt %20. Beide sind in einer Abfragezeichenfolge korrekt, und Server akzeptieren beide, aber wenn du den Body einer POST-Anfrage von Hand baust, solltest du der Form-Konvention folgen.
Die +-Mehrdeutigkeit
Weil die Form-Codierung + eine Sonderbedeutung gibt, muss ein wörtliches Pluszeichen in einem Form-Wert selbst als %2B codiert werden. Das ist der häufigste Codierungsfehler in der Wildnis: eine base64-Zeichenkette oder eine Telefonnummer im internationalen Format wird unverändert durchgereicht, und die empfangende Seite verwandelt jedes + in ein Leerzeichen. Wenn deine Daten Pluszeichen enthalten kann, codiere sie entweder explizit oder vermeide den Form-Modus.
Doppelte Codierung
Das Codieren einer bereits codierten Zeichenkette verwandelt jedes % in %25, sodass aus %20 zu %2520 wird. Das ist meist ein Fehler — er passiert, wenn ein Wert von Anwendungscode codiert und dann noch einmal von einem Framework oder Proxy codiert wird. Wenn du %25 in einer URL siehst, wo du kein wörtliches Prozentzeichen beabsichtigt hast, siehst du einen doppelt codierten Wert. Zweimal Decodieren stellt das Original wieder her, aber die echte Lösung ist, einen der Codierungsschritte zu entfernen.
FAQs
Sollte ich %20 oder + für ein Leerzeichen verwenden?
Beide werden in einer Abfragezeichenfolge akzeptiert. Verwende %20, wenn du eine Darstellung willst, die überall gültig ist, einschließlich innerhalb eines Pfadsegments, wo + ein wörtliches Plus bedeutet. Verwende + nur, wenn du application/x-www-form-urlencoded-Daten erzeugst.
Warum verwandelt sich mein Pluszeichen in ein Leerzeichen?
Irgendetwas in der Kette parst den Wert als Formulardaten, wo + die Codierung für ein Leerzeichen ist. Codiere wörtliche Pluszeichen als %2B, bevor du sie sendest.
Muss ich einen Schrägstrich codieren?
Nur, wenn der Schrägstrich Teil eines Werts statt eines Pfadtrennzeichens ist. Ein Dateiname mit Schrägstrich muss als %2F gesendet werden, sonst liest der Server ihn als zusätzliche Verzeichnisebene. Beachte, dass einige Server %2F in Pfaden standardmäßig als Vorsichtsmaßnahme gegen Traversal ablehnen.
Ist die Codierung groß-/kleinsensitiv?
Die Hex-Ziffern dürfen groß oder klein sein und decodieren identisch, aber RFC 3986 sagt, man solle Großbuchstaben bevorzugen. %2F und %2f sind dasselbe Zeichen; %2F ist die kanonische Schreibweise.
Warum schlägt das Decodieren bei meiner Zeichenkette fehl?
Ein Prozentzeichen muss von genau zwei Hexadezimalziffern gefolgt sein. Ein nacktes % oder etwas wie %zz ist fehlerhaft und der Decoder wirft einen Fehler. Wenn dein Text legitimerweise ein Prozentzeichen enthält, hätte es als %25 codiert sein sollen.
Sendet das meine Daten irgendwohin?
Nein. Codieren und Decodieren laufen beide im Browser mit den eingebauten URI-Funktionen. Es wird nichts hochgeladen.