Die URL-Kodierung, auch bekannt als Prozentkodierung, wandelt Zeichen in ein Format um, das sicher in URLs übertragen werden kann. Jedes Mal, wenn Sie eine Website besuchen, ein Formular absenden oder eine API-Anfrage senden, arbeitet die URL-Kodierung im Hintergrund, um sicherzustellen, dass Sonderzeichen und nicht-ASCII-Text korrekt übertragen werden. Ohne URL-Kodierung würden einfache Aktionen wie die Suche nach "coffee & tea" die URL-Struktur beschädigen und möglicherweise Fehler oder Sicherheitslücken verursachen.
Das Problem verstehen
URLs haben einen eingeschränkten Satz erlaubter Zeichen, wie in RFC 3986 definiert. Die erlaubten Zeichen fallen in zwei Kategorien:
- Reservierte Zeichen:
:,/,?,#,[,],@,!,$,&,',(,),*,+,,,;,= - Nicht reservierte Zeichen:
A-Z,a-z,0-9,-,.,_,~
Alle Zeichen außerhalb dieser Sätze müssen kodiert werden. Selbst reservierte Zeichen müssen kodiert werden, wenn sie in einem Kontext verwendet werden, in dem sie normalerweise eine besondere Bedeutung hätten. Zum Beispiel ist das &-Zeichen für die Trennung von Abfrageparametern reserviert. Wenn Sie ein wörtliches & in einem Parameterwert verwenden möchten, muss es als %26 kodiert werden.
Warum URL-Kodierung wichtig ist
1. Bewahrung der URL-Struktur
Sonderzeichen wie ?, & und # haben in URLs bestimmte Bedeutungen. Das ? markiert den Beginn der Abfragezeichenfolge, & trennt Abfrageparameter und # kennzeichnet einen Fragmentbezeichner. Wenn Benutzereingaben eines dieser Zeichen enthalten, müssen sie kodiert werden, um eine Fehlinterpretation der URL zu verhindern.
2. Umgang mit Sonderzeichen
Leerzeichen sind in URLs nicht erlaubt. Sie müssen als %20 oder + kodiert werden (letzteres nur in Abfragezeichenfolgen). Ebenso müssen Zeichen wie akzentuierte Buchstaben (é, ü, ñ), Symbole (£, ©, ®) und nicht-lateinische Schriften kodiert werden.
3. Sicherheit
Die URL-Kodierung ist eine kritische Sicherheitsmaßnahme gegen Injection-Angriffe. Angreifer können URLs manipulieren, um schädliche Inhalte einzuschleusen. Durch die Kodierung von Benutzereingaben vor der Aufnahme in URLs verhindern Sie, dass Angreifer die beabsichtigte URL-Struktur durchbrechen.
4. Internationalisierung (IRI-Unterstützung)
Das moderne Web unterstützt internationalisierte Ressourcenbezeichner (IRIs), die nicht-ASCII-Zeichen in URLs erlauben. IRIs müssen vor der Übertragung mit Punycode und Prozentkodierung in kodierte ASCII-URLs umgewandelt werden.
Wie URL-Kodierung funktioniert
Zeichen werden als % gefolgt von zwei hexadezimalen Ziffern kodiert, die den Bytewert des Zeichens darstellen. Hier ist die Kodierungstabelle:
| Zeichen | Kodiert | Grund |
|---|---|---|
| Leerzeichen | %20 |
Nicht in URLs erlaubt |
| ! | %21 |
Reserviertes Zeichen |
| " | %22 |
Nicht erlaubt |
| # | %23 |
Fragmentbezeichner |
| $ | %24 |
Reserviert |
| % | %25 |
Escape-Zeichen selbst |
| & | %26 |
Abfrage-Trennzeichen |
| ' | %27 |
Reserviert |
| ( | %28 |
Reserviert |
| ) | %29 |
Reserviert |
| + | %2B |
Reserviert (Leerzeichen in Abfrage) |
| , | %2C |
Reserviert |
| / | %2F |
Pfad-Trennzeichen |
| : | %3A |
Reserviert |
| ; | %3B |
Reserviert |
| < | %3C |
Nicht erlaubt |
| > | %3E |
Nicht erlaubt |
| ? | %3F |
Abfragebeginn |
| @ | %40 |
Reserviert |
| [ | %5B |
Reserviert |
| ] | %5D |
Reserviert |
| ~ | %7E |
Erlaubt, aber manchmal kodiert |
URL-Kodierung in der Programmierung
JavaScript:
const url = encodeURI("https://example.com/search?q=hello world");
const query = encodeURIComponent("coffee & tea");
const decoded = decodeURIComponent("coffee%20%26%20tea");
Python:
from urllib.parse import quote, unquote, urlencode
encoded = quote("coffee & tea", safe='')
params = urlencode({'q': 'coffee & tea', 'page': 1})
decoded = unquote("coffee%20%26%20tea")
Andere Sprachen: PHP (urlencode()), Ruby (URI.encode()), Java (URLEncoder.encode()), C# (HttpUtility.UrlEncode())
Häufige Fehler
- Kodieren einer gesamten URL - Verwenden Sie
encodeURIfür vollständige URLs,encodeURIComponentfür Parameterwerte - Doppelte Kodierung - Kodieren von bereits kodiertem Text (z.B. wird
%20zu%2520) - Vergessen, Benutzereingaben zu kodieren - Kodieren Sie immer Benutzereingaben, die in URLs vorkommen