Gunnar Bittersmann: &region ® & und = codieren? +PHP

Beitrag lesen

@@Tim:

Bedeutet das dann zwangsläufig ich lag bisher falsch und, selbst im Zeitalter von UTF-8, ich muss einen komplexen Querystring sowohl mit (raw)urlencode bearbeiten und mit htmlspecialchars?

Selbst im Zeitalter von UTF-8 musst Zeichen immer kontextspezifisch codieren. Das bedeutet auch, Zeichen, die in diesem Kontext eine Sonderbedeutung haben, zu escapen.

'&' hat in HTML (SGML, XML) die Sonderbedeutung, eine Zeichenreferenz einzuleiten. Deshalb muss das Zeichen "&" (wenn es als solches gemeint ist und nicht als Einleitung einer Zeichenreferenz) escapet werden: kontextspezifisch als '&' oder '&' (oder '&#38', aber das ist unsinnig).

'&' hat in einem Query (der Teil nach '?' (bis '#') in einem URI) die Sonderbedeutung, Parameter voneinander zu trennen. Deshalb muss das Zeichen "&" (wenn es als solches gemeint ist und nicht als Trennzeichen) escapet werden: kontextspezifisch als '%26'.

So sieht ein URI mit dem Parametern company=Gump&Bubba und product=shrimps so aus:
http://example.com/?company=Gump&26Bubba&product=shrimps
                     Zeichen "&"▲▲▲     ▲Trennzeichen

Kommt dieser in den HTML-Kontest, dann:
<a href="http://example.com/?company=Gump&26Bubba&amp;product=shrimps">
                                                 ▲▲▲▲▲Zeichen-Entity-Referenz

Live long and prosper,
Gunnar

--
Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)