@@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 '&', 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&product=shrimps">
▲▲▲▲▲Zeichen-Entity-Referenz
Live long and prosper,
Gunnar
Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)