Julius: URL Encoding wann nötig bzw. sinnvoll?

Beitrag lesen

Hallo Karl Heinz,

es beim Escapen immer auf den Kontext an. In URLs haben laut dem von dir verlinkten Wikipedia-Artikel die Zeichen : / ? # [ ] @ $ & ' ( ) * + , ; = in URLs eine besondere Bedeutung (mit # kann man IDs in einer Seite anspringen, mit ? leitet man die URL-Parameterliste ein, deren einzelne Paramter mit & getrennt werden.

Nehmen wir als Beispiel die URL http://example.org/resolve.php?page=start#footer, sie könnte bedeuten, dass wir dem Skript resolve.php den Parameter „page“ mit dem Wert „start“ übergeben und dann den Browser anweisen, das Element mit der ID „footer“ anzuspringen. Angenommen, der Parameter „page“ hätte nun den Wert „#-tag“ und die URL würde so aussehen: http://example.org/resolve.php?page=#tag#footer, würde am Server bloß http://example.org/resolve.php?page= ankommen, weil nur der Teil vor dem ersten als Fragment-Identifier verstandenem # übermittelt wird. Man muss also zwischen der Raute als Wert in der URL und als Beginn des Fragment-Identifiers unterscheiden können. Folglich kodiert man die erste Raute, die nicht die Sonderbedeutung hat: http://example.org/resolve.php?page=%23tag#footer
Natürlich muss diese Kodierung auf dem Server wieder rückgängig gemacht werden.

Dein Verständnisproblem ist wahrscheinlich, dass du meinst, die ganze URL kodieren zu müssen, es geht aber lediglich darum, in URLs die Teile zu kodieren, die keine spezielle Bedeutung haben sollen. – In HTML ist es analog: Will ich <ironie> ausgeben, muss ich &lt;ironie&gt; schreiben, ich kodiere aber nicht das ganze HTML-Dokument:

&lt;!doctype html&gt;
&lt;html lang=&quot;de&quot;&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Titel&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;/body&gt;
&lt;/html&gt;

Gruß
Julius