@@wisch
Das & sollte in HTML escapet sein: <img src="./showPic.php?name=Bild1&S=<?=$id?>">
In einer URL trennt das
&
die Parameter-Paare eines GET-Requests.
Richtig. (Wenngleich ;
dafür besser geeigent gewesen wäre.)
Es wird also nicht escaped.
Falsch. Wenn du einen URL in den HTML-Kontext bringst, muss der wie alles andere auch entsprechend behandelt werden – d.h. Sonderzeichen (das sind in HTML <
und &
; in Attributwerten auch "
bzw. '
) müssen ggfs. escapet werden.
Durch die Toleranz von HTML wird auch – wenn man Glück hat – bei nicht-escapeten &
was draus: Wenn der Parser &S=
ließt, dann weiß er, dass =
nicht mehr zur Entity-Referenz gehört. &S
gibt’s nicht, also werden die Zeichen &
und S
einzeln verwendet.
Anders bei ©=
. ©
gibt’s: ©
. Und auf einmal steht ?name=Bild1©=foo
im URI[1] und man wundert sich, warum das nicht funktioniert.
Protip: Sich nicht auf Glück verlassen! Nicht darüber nachdenken, wann &
unbedingt zu escapen sind und wann es auch ohne ginge! Immer escapen!
Als Wert im Parameter müssen Sonderzeichen mit
urlencode()
codiert werden. Aus & wird dann %26.
Das ist was anderes. Dann wäre Bild&S=foo
der Wert für den Parameter bild
.
Ich beschränke mich auf das für das Thema unverzichtbare😉.
Die Beachtung jedwegen Kontextwechsels ist unverzichtbar.
LLAP 🖖
“When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
Wobei
foo
hier für die ID steht, die PHP da mit<?=$id?>
reinschreibt. ↩︎