Tach!
Mal generell gesagt: Man kann zwar so lange Lösugen suchen, bis es funktioniert, ohne das Prinzip dahinter zu verstehen. Das mag in deinem privaten Projekt alles halb so wild sein, aber wenn dein nächstes öffentlich wird, ist die Angelegenheit schon kritischer zu sehen. Es ist ja nicht nur deine Anwendung betroffen, wenn sie unsicher ist. Das ganze Internet leidet unter Angriffen die vor allem von gekaperten Rechnern und Anwendungen ausgeführt werden.
wenn ich bei mir
echo '<p>Farbe: ' . htmlspecialchars($fghzh) ."</p>";
anwende, dann wird dieses genau so als HTML ausgegeben, was ja nicht Sinn der Sache ist, deshalb habe ich bei mir das "htmlspecialchars" weg gelassen.
Das Prinzip ist im Artikel zum Kontextwechsel beschrieben. Du darfst nicht einfach alle Ausgaben behandeln, du musst das gezielt anhand des Kontextes / der Situation und für jeden/jede individuell durchführen. Dazu musst du erkennen, wann welcher Kontext vorliegt und wissen, welche besonderen Zeichen für diesen berücksichtigt werden müssen und welche Hilfsfunktion das für dich erledigt.
Wenn du bereits ein HTML-Fragement hat, und das in anderes HTML einfügen möchtest, muss das ohne weitere Behandlung geschehen. Wenn in diesem Stück aber bereits vorher Daten unbekannten Aussehens eingefügt worden sind, dann musste bei diesem Einfügen der Wechsel in den Kontext HTML beachtet werden.
dedlfix.