Gunnar Bittersmann: Hallo, danke nochmal ...und noch eine kurze Verständnisfrage :D

Beitrag lesen

@@wisch

Das & sollte in HTML escapet sein:

<img src="./showPic.php?name=Bild1&amp;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 &copy=. &copy 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

  1. Wobei foo hier für die ID steht, die PHP da mit <?=$id?> reinschreibt. ↩︎