Moin!
und wieso verwendest Du bei der Vorschauausgabe als vordefinierte Werte in Deinem Formular nicht einfach das
$_POST['foo']
? Es reicht ja, wenn Du htmlspecialchars für die Ausgabe verwendest. Für die Wertbelegung Deiner Formularfelder ist das irrelevant.
Das ist falsch!
Nehmen wir mal eine einfache Textarea.
<textarea cols="20" rows="5" name="nachricht"></textarea>
Wenn das als Affenformular genutzt werden soll, dann gehört es sich, dass der eingegebene Text durch htmlspecialchars() durchgejagt wird, andernfalls ist das die Einladung, um das HTML der Seite kaputtmachen zu können.
echo '<textarea cols="20" rows="5" name="nachricht">'.htmlspecialchars($_POST['nachricht'].'</textarea>';
Wenn man das nicht tut, hat man ein Problem. Innerhalb der Textarea gelten bekanntlich keine HTML-Tags, deshalb wirken beispielsweise die Zeichen < und > nicht - bis auf dann, wenn man den String "</textarea>" in der Nachricht geschrieben hat.
Die Nichtwirkung der HTML-Tags ist nur freundliche Fehlerkorrektur des Browsers. In Wirklichkeit dürfen sie dort gar nicht auftauchen. Deshalb die Umwandlung in Entities.
Dem Affenformular macht das gar nichts. Die Entities im HTML-Quelltext werden vom Browser zurück in die damit gemeinten Originalzeichen gewandelt, wenn er den Quelltext geparst und dargestellt hat. Im Formular sind also keine Entities mehr gespeichert und werden auch nicht abgesendet.
Deshalb wird es niemals zu Entity-Verkettungen der Art &amp;amp;lt; kommen, wenn man das Affenformular mehrfach falsch absendet.
Für <input>-Elemente gilt sinngemäß dasselbe, hier ist das Anführungszeichen das böse Zeichen, und man kann selbstverständlich ebenfalls beliebig HTML und Javascript hinzufügen, wenn das Escaping unterbleibt.
- Sven Rautenberg