Zum Inhalt springen

URL kodieren

Text per Prozentkodierung so umwandeln, dass er eine URL übersteht. Es gibt drei verschiedene Kodierungen für drei verschiedene Aufgaben, und wer die falsche wählt, macht Werte unbemerkt kaputt – deshalb sagt Ihnen die Seite, welche Sie brauchen.

  • Nie gespeichert
  • Keine Warteschlange, kein Warten
  • Ohne Anmeldung, ohne Wasserzeichen
Kodiert

Kodiert erscheint hier.

So funktioniert’s

1

Text einfügen

Beliebiger Text in beliebiger Sprache. Er wird als UTF-8 kodiert – das, was jeder moderne Server erwartet.

2

Aufgabe wählen

Ein einzelner Wert für einen Query-String, eine ganze, fertig zusammengesetzte URL oder ein Formularversand. Der Unterschied zählt, und jede Variante wird erklärt.

3

Ergebnis kopieren

Kodieren Sie Zeile für Zeile, wenn Sie eine ganze Liste auf einmal bearbeiten wollen.

Drei richtige Antworten – und warum ein einziger Button falsch ist

Die Prozentkodierung ersetzt ein Zeichen durch ein % und seinen Bytewert in Hex. Die Spezifikation teilt Zeichen in drei Gruppen ein, und alles Verwirrende daran folgt aus dieser Einteilung. Nicht reservierte Zeichen – Buchstaben, Ziffern, Bindestrich, Punkt, Unterstrich und Tilde – müssen nie kodiert werden. Reservierte Zeichen – die Schrägstriche, Fragezeichen, kaufmännischen Und-Zeichen, Gleichheitszeichen und Doppelpunkte, die einer URL ihre Struktur geben – müssen kodiert werden, *wenn sie Daten sind*, und dürfen es nicht, *wenn sie Struktur sind*. Alles andere wird immer kodiert.

Deshalb gibt es keine einzige richtige Antwort. Beim Kodieren einer ganzen URL müssen Schrägstriche und Fragezeichen unangetastet bleiben, sonst ist die Adresse keine Adresse mehr. Beim Kodieren eines Werts für einen Query-Parameter müssen kaufmännische Und-Zeichen und Gleichheitszeichen maskiert werden, sonst zerfällt ein Wert, der eines enthält, in zwei Parameter. Beim Kodieren eines Pfadsegments müssen Schrägstriche maskiert werden, sonst wird aus einem Dateinamen mit Schrägstrich ein Pfad über zwei Verzeichnisse. Ein einzelner Kodieren-Button wählt einen dieser Fälle und liegt in den anderen zwei Dritteln falsch – meist unbemerkt und meist so, dass es erst bei ungewöhnlichen Eingaben auffällt.

Das Leerzeichen ist das Zeichen mit der meisten Geschichte. In einer URL ist es %20. In einem abgesendeten HTML-Formular ist es ein + – eine eigene, ältere Kodierung, die überlebt hat, weil Formulare seit 1994 so funktionieren. Beide sind in ihrem eigenen Kontext richtig und im jeweils anderen falsch, weshalb ein Pluszeichen in einem Query-String auf eine Weise mehrdeutig ist, die keine noch so sorgfältige Kodierung auf der sendenden Seite beheben kann.

Nicht-ASCII-Text wird zuerst als UTF-8 und dann Byte für Byte kodiert, sodass ein einzelner Buchstabe mit Akzent oder Umlaut zu zwei Prozentsequenzen wird und ein Emoji zu vier. Doppelte Kodierung ist der klassische Fehler: Wer etwas bereits Kodiertes erneut kodiert, macht aus jedem % ein %25, sodass aus %20 ein %2520 wird und die Gegenseite ein wörtliches Prozentzeichen erhält. Wenn eine URL voller %25 ist, ist sie durch einen Encoder zu viel gelaufen.

Wenn Sie etwas anderes brauchen

Im Code verwenden Sie die eigene Funktion der Sprache und wählen sie so bewusst, wie diese Seite Sie wählen lässt. JavaScript hat encodeURI für ganze Adressen und encodeURIComponent für Werte; Python hat urllib.parse.quote mit einem safe-Argument, das Schrägstriche standardmäßig unangetastet lässt; PHP unterscheidet rawurlencode von urlencode, die sich genau in der oben beschriebenen Frage Leerzeichen gegen Plus unterscheiden. Noch besser: URLs mit einem URL-Typ zusammensetzen statt durch Aneinanderhängen von Strings – dann stellt sich die Frage gar nicht.

Auf der Kommandozeile kodiert jq -rR @uri sicher und kommt mit einer Liste zurecht, und curl --data-urlencode baut einen korrekt kodierten Parameter, ohne dass Sie überlegen müssen, in welchem der drei Fälle Sie sich befinden – die einzige Stelle, an der das wirklich einfach ist.

Häufig gestellte Fragen

Welche der drei sollte ich verwenden?

„Ein Wert“, fast immer. Nehmen Sie diesen Modus, wenn Sie EINEN Wert kodieren, der gleich in einen Query-String oder ein Pfadsegment kommt – einen Suchbegriff, eine E-Mail-Adresse, ein Weiterleitungsziel. Er ist der einzige der drei, der &, =, ? und / maskiert, und genau das verhindert, dass Ihr Wert aus seinem Parameter ausbricht und zu zwei Parametern wird. „Eine ganze URL“ nur dann, wenn Sie bereits eine vollständige URL haben und nur ihre unsicheren Zeichen bereinigen wollen; dieser Modus lässt die strukturellen Zeichen bewusst unangetastet, damit die URL eine URL bleibt. „Formulardaten“, wenn Sie einen application/x-www-form-urlencoded-Body bauen, in dem ein Leerzeichen + statt %20 ist.

Warum hat mein „&“ die URL kaputt gemacht?

Weil es nicht kodiert war – und & trennt in einem Query-String einen Parameter vom nächsten. Ein Wert wie „Schmidt & Söhne“, der roh an ?company= angehängt wird, kommt beim Server als company=Schmidt plus ein zweiter, leerer Parameter namens „Söhne“ an. Das ist der mit Abstand häufigste URL-Fehler, und die Kodierung als einzelner Wert behebt ihn – sie macht aus & ein %26, sodass der Wert ein Wert bleibt.

Warum ist mein „+“ zu einem Leerzeichen geworden?

Weil + in einem Query-String ein Leerzeichen bedeutet – eine von HTML-Formularen geerbte Regel, die niemand je abschaffen konnte. Ein wörtliches Plus in Ihren Daten, etwa in einer Telefonnummer oder einer Base64-Zeichenfolge, liest der empfangende Server daher als Leerzeichen. Die Kodierung als einzelner Wert maskiert es als %2B, und so kommt es unversehrt an.

Funktioniert das mit anderen Sprachen und Emojis?

Ja. Text wird zuerst in UTF-8 umgewandelt und dann Byte für Byte prozentkodiert – so verlangt es RFC 3986, und so erwartet es jeder moderne Server. Japanisch, Arabisch, lateinische Schrift mit Akzenten und Umlauten sowie Emojis kommen exakt unverändert zurück.

Warum werden ! ' ( ) * hier kodiert, wenn andere Tools sie stehen lassen?

Weil das im Browser eingebaute encodeURIComponent diese fünf unverändert lässt, RFC 3986 sie aber als reserviert führt. Manche Server und Frameworks behandeln sie als Struktur, sodass ein Wert, der sie enthält, falsch gelesen werden kann. Sie zu kodieren, schadet nicht – sie werden überall identisch zurückdekodiert – und beseitigt eine ganze Klasse seltener, schwer zu diagnostizierender Fehler. So machen es sorgfältige Implementierungen.

Wird mein Text irgendwo gespeichert?

Nein. Es wird nichts gespeichert und keine Anfrage gestellt. Sie können nach dem Laden der Seite die Internetverbindung trennen, und sie funktioniert weiter.

Gut zu wissen: Es gibt drei verschiedene richtige Antworten, und die Seite lässt Sie wählen, weil der übliche einzelne Kodieren-Button in zwei Dritteln der Fälle falsch liegt. Eine ganze URL, ein Query-Parameter und ein Pfadsegment maskieren jeweils andere Zeichen; wer die falsche Variante nimmt, macht unbemerkt Schrägstriche, Pluszeichen oder kaufmännische Und-Zeichen kaputt.

Dieses Tool auf Ihrer Website einbinden

Kostenlos für jeden Blog, jede Kursseite und jeden Hilfeartikel. Fügen Sie ein einziges Snippet ein, und Ihre Besucher können das Tool direkt auf Ihrer Seite nutzen.