Der vollständige Leitfaden zur URL-Kodierung
Erfahren Sie alles über die URL-Kodierung: was sie ist, warum sie wichtig ist, wie das Prozent-Encoding funktioniert und welche Best Practices für den Umgang mit Sonderzeichen in URLs gelten.
Was ist URL-Kodierung?
Die URL-Kodierung, auch bekannt als Prozent-Encoding, ist ein Verfahren zur Kodierung von Informationen in einem Uniform Resource Identifier (URI) unter bestimmten Umständen. Obwohl sie als URL-Kodierung bezeichnet wird, kommt sie auch allgemeiner innerhalb der gesamten Uniform-Resource-Identifier-(URI-)Familie zum Einsatz, zu der sowohl der Uniform Resource Locator (URL) als auch der Uniform Resource Name (URN) gehören.
Die Kodierung ist notwendig, weil URLs nur über den ASCII-Zeichensatz durch das Internet übertragen werden können. Da URLs häufig Zeichen außerhalb des ASCII-Bereichs enthalten, muss die URL in ein gültiges ASCII-Format umgewandelt werden. Bei der URL-Kodierung werden unsichere ASCII-Zeichen durch ein % gefolgt von zwei Hexadezimalziffern ersetzt.
Wie funktioniert das Prozent-Encoding?
Beim Prozent-Encoding wird jedes zu kodierende Zeichen in ein oder mehrere Bytes umgewandelt. Jedes Byte wird anschließend durch ein Prozentzeichen gefolgt von zwei Hexadezimalziffern dargestellt. Die Hexadezimalziffern geben den Bytewert des Zeichens in der jeweiligen Kodierung (in der Regel UTF-8) an.
Das Leerzeichen (ASCII-Wert 32, hexadezimal 20) wird beispielsweise zu %20. Das Kaufmannsund & (ASCII-Wert 38, hexadezimal 26) wird zu %26. Nicht-ASCII-Zeichen wie das e mit Akut werden zunächst in ihre UTF-8-Bytefolge umgewandelt, und anschließend wird jedes Byte prozent-kodiert.
Reservierte und nicht reservierte Zeichen
RFC 3986 definiert zwei Kategorien von Zeichen für URIs: reservierte und nicht reservierte. Zu den nicht reservierten Zeichen gehören Groß- und Kleinbuchstaben (A-Z, a-z), Ziffern (0-9), Bindestriche (-), Punkte (.), Unterstriche (_) und Tilden (~). Diese Zeichen dürfen ohne Kodierung in einem URI verwendet werden.
Reservierte Zeichen haben in der URL-Syntax eine besondere Bedeutung. Dazu zählen: :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ; und =. Werden diese Zeichen in einer URI-Komponente außerhalb ihres reservierten Zwecks verwendet, müssen sie prozent-kodiert werden.
URL-Kodierung in verschiedenen Programmiersprachen
JavaScript
JavaScript stellt zwei Funktionspaare für die URL-Kodierung bereit: encodeURI() / decodeURI() zum Kodieren vollständiger URIs sowie encodeURIComponent() / decodeURIComponent() zum Kodieren einzelner URI-Komponenten. Der entscheidende Unterschied besteht darin, dass encodeURI() reservierte Zeichen mit besonderer Bedeutung in URIs (wie /, ?, #) beibehält, während encodeURIComponent() alle nicht-alphanumerischen Zeichen kodiert.
Python
Das Modul urllib.parse in Python bietet quote() und unquote() für die grundlegende Kodierung/Dekodierung sowie urlencode() zum Kodieren von Dictionaries in Query-Strings. Die Funktion quote() besitzt einen optionalen Parameter safe, mit dem sich Zeichen festlegen lassen, die nicht kodiert werden sollen.
PHP
PHP bietet urlencode(), das Leerzeichen als + kodiert (gemäß dem Format application/x-www-form-urlencoded), sowie rawurlencode(), das Leerzeichen als %20 kodiert (gemäß RFC 3986). Zum Dekodieren verwenden Sie entsprechend urldecode() und rawurldecode().
Best Practices
- Kodieren Sie Benutzereingaben immer, bevor Sie sie in URLs einfügen
- Verwenden Sie
encodeURIComponent()zum Kodieren von Query-Parameterwerten in JavaScript - Verwenden Sie
encodeURI()nur zum Kodieren einer vollständigen URI - Bleiben Sie in Ihrer gesamten Anwendung bei einem einheitlichen Kodierungsansatz
- Dekodieren Sie URLs stets serverseitig, bevor Sie sie verarbeiten
- Testen Sie Ihre Kodierung mit Sonderzeichen, einschließlich Unicode
- Kodieren Sie URLs nicht doppelt -- prüfen Sie stets, ob ein String bereits kodiert ist