Jedes Mal, wenn Sie eine Suchanfrage absenden, auf einen Link mit Sonderzeichen klicken oder eine API-Anfrage in Ihrem Code erstellen, leistet die URL-Kodierung stillschweigend ihre Arbeit im Hintergrund. Doch viele Entwickler – selbst erfahrene – sind sich oft nicht ganz im Klaren darüber, was URL-Kodierung genau ist, warum sie existiert und wann sie manuell angewendet werden muss. Dieser Leitfaden deckt alles ab, was Sie wissen müssen, um URLs sicher und korrekt zu handhaben.
Das Problem: URLs haben einen begrenzten Zeichensatz
Eine URL (Uniform Resource Locator) ist durch RFC 3986 definiert, den Internetstandard, der die Syntax von URIs (Uniform Resource Identifiers) festlegt. Diese Spezifikation erlaubt nur einen eingeschränkten Satz von Zeichen in einer URL:
- Nicht reservierte Zeichen — können überall sicher verwendet werden:
A–Z a–z 0–9 - _ . ~ - Reservierte Zeichen — haben eine spezielle strukturelle Bedeutung:
: / ? # [ ] @ ! $ & ' ( ) * + , ; = - Alle anderen Zeichen — einschließlich Leerzeichen, akzentuierter Buchstaben, Emojis und der meisten Unicode-Zeichen — sind in einer rohen URL nicht zulässig.
Was aber, wenn Sie ein Leerzeichen in eine URL aufnehmen müssen? Oder ein kaufmännisches Und-Zeichen, das Teil eines Abfragewerts ist und nicht als Trennzeichen dient? Oder gar ein chinesisches Schriftzeichen in einer Suchanfrage? Genau hier kommt die URL-Kodierung ins Spiel, um diese Herausforderungen zu lösen.
Was ist URL-Kodierung (Prozent-Kodierung)?
Die URL-Kodierung, formell als Prozent-Kodierung bekannt, ist der Mechanismus, durch den unsichere oder reservierte Zeichen in eine sichere Darstellung umgewandelt werden, die ohne Mehrdeutigkeit in einer URL übertragen werden kann.
Der Prozess ist denkbar einfach: Jedes unsichere Zeichen wird durch ein Prozentzeichen (%) ersetzt, gefolgt von der zweistelligen Großbuchstaben-Hexadezimaldarstellung seines ASCII- oder UTF-8-Byte-Wertes.
Leerzeichen → %20 (oder + in Query-Strings) ! → %21 " → %22 # → %23 $ → %24 % → %25 & → %26 ' → %27 ( → %28 ) → %29 + → %2B / → %2F : → %3A = → %3D ? → %3F @ → %40
Bei mehrbytigen UTF-8-Zeichen (wie akzentuierten lateinischen Buchstaben, CJK-Zeichen oder Emojis) wird jedes Byte in der UTF-8-Kodierung einzeln prozent-kodiert. Zum Beispiel wird das französische Wort café – wobei é in UTF-8 als die beiden Bytes 0xC3 0xA9 kodiert ist – zu caf%C3%A9.
URL-Kodierung vs. URI-Komponenten-Kodierung
Es gibt zwei subtil unterschiedliche Varianten der URL-Kodierung, die viele Entwickler verwirren:
- Formular-Kodierung (
application/x-www-form-urlencoded) — Wird für HTML-Formular-GET-Übermittlungen und viele APIs verwendet. Bei dieser Variante werden Leerzeichen als+anstelle von%20kodiert. In PHP ist diesurlencode(); in JavaScript wird dies vonnew URLSearchParams()erzeugt. - URI-Komponenten-Kodierung — Strenger. Leerzeichen werden zu
%20, und keine reservierten Zeichen bleiben unkodiert. In PHP ist dies nicht direkt verfügbar (aber überrawurlencode()erreichbar); in JavaScript ist esencodeURIComponent().
Beim Erstellen von Query-Strings für REST-APIs sollten Sie die URI-Komponenten-Kodierung (encodeURIComponent / rawurlencode) bevorzugen, um Mehrdeutigkeiten zu vermeiden. Wenn Sie HTML-Formulare über GET übermitteln, übernimmt der Browser die Kodierung automatisch.
Wann müssen Sie URLs manuell kodieren?
Browser und viele HTTP-Bibliotheken handhaben die URL-Kodierung in gängigen Fällen automatisch, sodass Sie nicht immer darüber nachdenken müssen. Sie müssen jedoch in den folgenden Situationen manuell kodieren:
- Erstellen von URLs im Code: Wenn Sie Benutzereingaben oder dynamische Daten in eine URL-Zeichenkette verketten, kodieren Sie immer jede Komponente separat. Kodieren Sie niemals die gesamte URL auf einmal – das würde auch die Slashes und Doppelpunkte kodieren, die der URL ihre Struktur geben.
- API-Anfragen: Wenn Sie vom Benutzer bereitgestellte Werte als Abfrageparameter an eine REST-API übergeben, prozent-kodieren Sie jeden Wert einzeln.
- Weiterleitungs-URLs: Wenn Sie eine Weiterleitungs-URL als Abfrageparameterwert einbetten (z.B.
?redirect=https://example.com/path), muss die gesamte Weiterleitungs-URL kodiert werden. - Generieren von Links aus serverseitigen Templates: Wenn Sie URLs in PHP, Python, Ruby oder einer anderen serverseitigen Sprache ausgeben, kodieren Sie die Werte mit der entsprechenden Funktion.
URL-Kodierung in verschiedenen Programmiersprachen
// Formular-Stil Kodierung (Leerzeichen → +)
$encoded = urlencode("hello world & café");
// → hello+world+%26+caf%C3%A9
// Strikte Kodierung (Leerzeichen → %20)
$encoded = rawurlencode("hello world");
// → hello%20world
// Kodierung eines einzelnen Query-Parameter-Wertes
encodeURIComponent("hello world & café");
// → "hello%20world%20%26%20caf%C3%A9"
// Kodierung einer vollständigen URL (behält :, /, ? bei)
encodeURI("https://example.com/café");
// → "https://example.com/caf%C3%A9"
Häufige Fehler, die es zu vermeiden gilt
- Doppelte Kodierung: Das Kodieren einer bereits kodierten Zeichenkette führt zu fehlerhafter Ausgabe wie
%2520(da das%-Zeichen selbst kodiert wird). Dekodieren Sie immer zuerst, bevor Sie erneut kodieren, wenn Sie sich über den Eingabezustand unsicher sind. - Kodierung der gesamten URL: Sie sollten nur die Werte von Abfrageparametern kodieren, nicht die strukturellen Teile der URL (Schema, Host, Pfadtrenner).
- Verwendung von
encodeURIfür Abfragewerte:encodeURIkodiert nicht&,=oder+, was bedeutet, dass Abfrageparameterwerte, die diese Zeichen enthalten, Ihre URL-Struktur beschädigen. Verwenden Sie für Werte immerencodeURIComponent.
Dekodierung von URL-kodierten Zeichenketten
Die Dekodierung kehrt den Prozess um: %20 wird zu einem Leerzeichen, %C3%A9 wird zu é und so weiter. Server dekodieren eingehende Anfrage-URLs automatisch. Im Code verwenden Sie urldecode() (PHP) oder decodeURIComponent() (JavaScript).
Wenn Sie eine prozent-kodierte Zeichenkette schnell und ohne Code dekodieren müssen, nutzen Sie unser kostenloses URL-Dekodierer-Tool, oder kodieren Sie eine Zeichenkette mit unserem URL-Kodierer-Tool.
Probieren Sie unsere kostenlosen URL-Tools aus!
Kodieren oder dekodieren Sie jede URL sofort – ohne Registrierung, ohne Limits.