URL-Kodierung von Sonderzeichen: Eine Referenz für Entwickler
Eine umfassende Referenz zur URL-Kodierung von Sonderzeichen wie Leerzeichen, kaufmännischem Und, Unicode und mehr.
Sonderzeichen in URLs
URLs unterliegen einer strengen Syntax, die durch RFC 3986 definiert ist. Viele Zeichen haben eine besondere Bedeutung oder sind in bestimmten Teilen einer URL nicht zulässig. Zu verstehen, wie man diese Zeichen korrekt kodiert, ist entscheidend für den Aufbau zuverlässiger Webanwendungen und APIs.
Das Leerzeichen
Das Leerzeichen ist das am häufigsten kodierte Zeichen. Je nach Kontext kann es jedoch auf zwei Arten kodiert werden:
%20– Percent-Encoding gemäß RFC 3986, verwendet in URL-Pfaden und den meisten Kontexten+– Verwendet im Formatapplication/x-www-form-urlencoded(Übermittlung von HTML-Formularen)
Beim programmatischen Erstellen von URLs sollte aus Gründen der Konsistenz %20 bevorzugt werden. Beim Zusammenstellen von Formulardaten ist die +-Notation der Standard.
Reservierte Zeichen im Detail
Das kaufmännische Und (&)
Das kaufmännische Und trennt Query-Parameter voneinander. Wenn ein kaufmännisches Und in einem Parameterwert vorkommt, muss es als %26 kodiert werden, damit es nicht als Trennzeichen interpretiert wird. In HTML-Kontexten muss es zusätzlich als Entität & kodiert werden.
Das Fragezeichen (?)
Das Fragezeichen trennt den Pfad vom Query-String. Wenn ein Fragezeichen in einem Parameterwert vorkommt, muss es als %3F kodiert werden. Beachten Sie, dass encodeURI() Fragezeichen NICHT kodiert, encodeURIComponent() hingegen schon.
Das Rautezeichen (#)
Das Rautezeichen leitet den Fragment-Identifier ein. In URLs muss jedes # in einem Query-Parameterwert als %23 kodiert werden, andernfalls interpretiert der Browser alles danach als Fragment-Identifier und sendet es nicht an den Server.
Der Schrägstrich (/)
Schrägstriche trennen Pfadsegmente voneinander. Wenn ein Schrägstrich im Wert eines Pfadsegments vorkommt (etwa in einem Dateinamen, der einen Schrägstrich enthält), muss er als %2F kodiert werden. Beachten Sie, dass manche Server %2F dekodieren und es dennoch als Pfadtrenner behandeln.
Unicode-Zeichen
Zeichen außerhalb von ASCII werden kodiert, indem sie zunächst in ihre UTF-8-Bytefolge umgewandelt und anschließend jedes Byte percent-kodiert wird. Hier einige Beispiele:
- Lateinisches e mit Akut (e) → UTF-8: 0xC3 0xA9 →
%C3%A9 - Chinesisches Schriftzeichen (zhong) → UTF-8: 0xE4 0xB8 0xAD →
%E4%B8%AD - Emoji (Weltkugel) → UTF-8: 0xF0 0x9F 0x8C 0x8D →
%F0%9F%8C%8D
Kodierung in verschiedenen URL-Komponenten
| Komponente | Muss kodiert werden | Beispiel |
|---|---|---|
| Pfadsegment | Leerzeichen, ?, # und Nicht-ASCII | /path/my%20file |
| Query-Schlüssel | =, &, #, +, Leerzeichen | my%20key=value |
| Query-Wert | &, #, +, Leerzeichen, = | key=hello%20world |
| Fragment | Leerzeichen und Nicht-ASCII | #section%20one |
Häufige Fallstricke
- Vergessen,
#in Query-Werten zu kodieren (der Rest der URL wird stillschweigend verworfen) - Doppeltes Kodieren bereits kodierter Zeichenketten (führt zu
%2520statt%20) - Verwendung von
encodeURI()anstelle vonencodeURIComponent()für Parameterwerte +in Query-Werten nicht zu kodieren (es wird als Leerzeichen dekodiert)- Anzunehmen, dass alle Server
%2Fin Pfaden gleich behandeln