URL-Encoding oder auch URL-Kodierung, Prozentkodierung bzw. URI Escaping genannt, ist ein Mechanismus, um Informationen in einer URL unter bestimmten Gegebenheiten zu kodieren. Zur Kodierung werden nur bestimmte Zeichen des ASCII-Zeichensatzes verwendet.

Ohne diese Kodierung wären einige Informationen nicht in einer URL darstellbar. Beispielsweise kann mit der URL-Kodierung ein Leerzeichen problemlos als %20 übergeben werden. Einige Zeichen des ASCII-Zeichensatzes sind in einer URL nicht nur als Zeichen möglich, sondern können eine besondere Bedeutung haben. Diese "reservierten" Zeichen dienen beispielsweise der Strukturierung für die Weiterverarbeitung einer Anfrage über die URL. RFC 3986 definiert einen Standard, wie eine URI (und damit auch eine URL) syntaktisch aufgebaut sein sollte und unter welchen Bedingungen die URL-Kodierung Anwendung findet.

URL Encoding

Reservierte und nicht-reservierte URL Zeichen

URLs können maximal folgende Felder beinhalten:

http://joe:passwd@www.example.net:8080/index.html?action=something&session=A54C6F#info

Die oben aufgeführten Zeichen kennzeichnen dabei die einzelnen Segmente der URL und ermöglichen eine Zerlegung und Verarbeitung des Ausdrucks, wobei die Zeichen folgende Bedeutung haben:

  • Das Fragezeichen (?) leitet den Datenteil (Query-String) der URL ein.
  • Das Gleichheitszeichen (=) steht zwischen dem Namen eines Parameters und seinem Wert.
  • Das Kaufmannsund (&) dient als Trennzeichen zwischen "Parameter=Wert" Elementen im Datenteil.
  • Das Rautenzeichen (#) steht vor dem Namen eines Dokumentenankers.

Daneben gibt es noch weitere Zeichen, die im Dokumentenpfad eine spezifische Bedeutung haben. Insgesamt gelten folgende Zeichen als reserviert: ! # $ % & ' ( ) * +, / : ; = ? @ [ ]

Folgende Zeichen(gruppen) sind nicht reserviert, besitzen also in einer URL keine vorgegebene Bedeutung: Buchstaben [A-Z, a-z], Ziffern [0-9] und- _. ~

Die Prozent Kodierung

Eine URL besteht aus den genannten reservierten und nicht-reservierten Zeichen; andere Zeichen dürfen in einer URL nicht vorkommen. Es besteht jedoch prinzipiell der Bedarf, in URLs beliebige Zeichen darstellen zu können. Deshalb muss eine Möglichkeit existieren, reservierte Zeichen in einer URL derart schreiben zu können, dass sie ihre speziellen Bedeutungen verliere.

Die %-Darstellung von Zeichen trägt beiden Forderungen Rechnung. Ihr zugrunde liegt ein Kodierungsverfahren, welches jedem Zeichencode eine 3-stellige Zeichenkombination zuordnet, die mit dem Prozentzeichen eingeleitet wird, dem die zweiziffrige hexadezimale Darstellung des Zeichencodes folgt.

Ein reserviertes Zeichen ist in einer URL in %-kodierter Form zu schreiben, wenn es an der Stelle, an der es sich befindet, eine besondere Bedeutung hat, diese aber im vorliegenden Kontext nicht haben soll. Nicht-reservierte Zeichen können %-kodiert werden, sollten es aber nicht. Bei anderen Zeichen (u. a. Binärdaten) besteht meist gar keine andere Möglichkeit, als sie in einer URL in %-kodierter Form darzustellen.

Kodierung von Nicht-ASCII-Zeichen

Auch für die Zeichen, die nicht im ASCII-Zeichensatz enthalten sind, werden die Bytes mit vorangestelltem % kodiert. Welche Bitfolge ein Zeichen jedoch darstellt, hängt von der zu benutzenden Zeichenkodierung ab. Es wird zwar vom RFC 3986 empfohlen, UTF-8 zur Kodierung zu benutzen, da dieses Unicode-Format für alle internationalen Zeichen benutzt werden kann, was UTF-8 zwar zur Quasi-Standardkodierung für URIs macht, aber einen expliziten Standard gibt es noch nicht. Um die URL kodieren zu können, muss man also wissen oder ahnen, welche Zeichenkodierung für die abzurufende Datei benutzt wurde oder welche Kodierung der Zielrechner benutzt. Aus diesem Grund ist es immer noch sinnvoll, nur auf Zeichen aus dem ASCII-Vorrat zurückzugreifen.

In der empfohlenen Kodierung UTF-8 wäre der Buchstabe ö (mit dem Unicode-Zeichenwert 246) als %C3%B6 dargestellt. Alle Zeichenwerte über 127 werden in zwei, drei oder vier Byte-Werten repräsentiert und dementsprechend in die %-Kodierung übernommen.

Oft wird immer noch ISO 8859-1 (Latin-1) für die Darstellung benutzt und dessen identischer Zeichenwert 246 (Dezimal) direkt mit Hilfe der %-Kodierung in die URL eingefügt. Der Umlaut ö wird dann als Wert %F6 dargestellt.

Beide Darstellungsarten liefern dem Server aber eine andere Bitfolge. Obwohl beide Darstellungsarten nach ihrer Art richtig kodiert sind, liefert nur eine davon die gewünschte Datei und die andere meist nur eine Fehlermeldung. Bei einigen Servern wird jedoch versucht, die Kodierung zu ermitteln, um dann auf die richtige Datei weiterleiten zu können. Wenn es mit einer Kodierung nicht klappt, sollte man eine der anderen wahrscheinlichen Varianten probieren.

Eine Unterscheidung zwischen zwei einzelnen kodierten ASCII-Zeichen (z. B. %23%23 für ##) und einem 2-Byte-UTF-8-Zeichen (z. B. %C3%B6) ergibt sich aus der Art, wie UTF-8 kodiert ist. Die einzelnen Bytes ergeben für sich allein keine gültigen ASCII-Zeichen, da C3 der dezimalen 195 entspricht und B6 der 182. Da es nur 128 ASCII-Zeichen gibt, können es auch keine zwei einzelnen Zeichen sein und die Zeichen werden zusammen als UTF-8-kodiert angenommen. Eine Verwechslung ist somit nicht möglich. Auf einer ähnlichen Basis können einige Server auch ermitteln, welche Kodierung in der URL verwendet wird.

Prozent Kodierung mit Javascript und PHP

Zeichen JavaScript-Befehle PHP-Befehle
escape

encode

URI

encode

URI

Component

urlencode rawurlencode htmlentities
<space> %20 %20 %20 + %20
! %21 ! ! %21 %21 !
@ @ @ %40 %40 %40 @
# %23 # %23 %23 %23 #
$ %24 $ %24 %24 %24 $
% %25 %25 %25 %25 %25 %
^ %5E %5E %5E %5E %5E ^
& %26 & %26 %26 %26 &amp;
* * * * %2A %2A *
( %28 ( ( %28 %28 (
) %29 ) ) %29 %29 )
- - - - - - -
_ _ _ _ _ _ _
= %3D = %3D %3D %3D =
+ + + %2B %2B %2B +
: %3A : %3A %3A %3A :
; %3B ; %3B %3B %3B; ;
. . . . . . .
" %22 %22 %22 %22 %22 &quot;
' %27 ' ' %27 %27 '
\ %5C %5C %5C %5C %5C \
/ / / %2F %2F %2F /
? %3F ? %3F %3F %3F ?
< %3C %3C %3C %3C %3C &lt;
> %3E %3E %3E %3E %3E &gt;
~ %7E ~ ~ %7E %7E ~
[ %5B %5B %5B %5B %5B [
] %5D %5D %5D %5D %5D ]
{ %7B %7B %7B %7B %7B {
} %7D %7D %7D %7D %7D }
` %60 %60 %60 %60 %60 `
DrKnow, am 19.08.2010

Kommentare


   Einloggen
Autor seit 4 Jahren
12 Seiten
Pagewizz auf Facebook
Laden ...
Fehler!