Folgendes Beispiel: Ein Eingabefeld, in das der User HTML Code eingeben kann und nach Absenden des Formulars soll sowohl das HTML ausgewertet ausgegeben werden als auch die ursprüngliche Eingabe im Eingabefeld erneut bearbeitet werden können.
Eingabe:
Wichtig ist hierbei die Eingabe über FILTER_SANITIZE_SPECIAL_CHARS
oder FILTER_SANITIZE_FULL_SPECIAL_CHARS
zu filtern. Die SANITIZE* Filter sorgen dafür, dass auch eine Bereinigung der Werte stattfindet. Hierbei werden Zeichen wie “<>& in HTML Entitäten umgewandelt, Tags bleiben allerdings erhalten. Ein Anführungsstrich wird bspw. zu
"
FILTER_SANITIZE_STRING
geht hier zuweit, da auch HTML Tags entfernt werden. Sind magic_quotes aktiv, ist vor dem kaufmännischen Und noch ein Backslash.
Zur Ausgabe, in der das HTML ausgewertet werden soll muss html_entity_decode angewendet werden. Hierdurch werden die Zeichen für die Ausgabe wieder zurück in HTML gewandelt, das vom Browser interpretiert wird.
Ausnahme: Für die Ausgabe in einem Input-Feld sollen aber die Anführungszeichen nicht in HTML zurückgewandelt werden, da sonst der HTML Quellcode defekt ist (Anführungszeichen im value Attribut, das selbst Anführungszeichen enthäkt). Daher muss hier ENT_NOQUOTES aktiviert werden, um die Anführungszeichen nicht zurück zu wanddeln. Vergisst man dies, kommt beim value des input Feldes ein falsches Ergebnis heraus (drei Anführungsstriche) und die HTML Ausgabe ist invalide.
$output_field = '';
if(isset($_POST['submit']))
{
$filtered = filter_var($_POST['in'], FILTER_SANITIZE_SPECIAL_CHARS);
$output_page = html_entity_decode($filtered);
$output_field = html_entity_decode($filtered, ENT_NOQUOTES);
echo '<h1>OUTPUT:</h1>';
echo $output_field.'<br />';
}
?>
<hr />
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="in" value="<?php echo $output_field;?>"><br>
<input type="submit" name="submit" value="Submit Form"><br>
</form>
Als erster einen Kommentar schreiben.
Schreibe einen Kommentar