@@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
foohier für die ID steht, die PHP da mit<?=$id?>reinschreibt. ↩︎