Hallo
Sag mir als Bäuerin mal bitte was Du jetzt genau mit "kontextgerechte
Behandlung" meinst. :-)
Vorausgesetzt, du lässt bei der Eingabe jede Menge (ersatzweise: alle) Zeichen zu und durch, da du nicht wissen kannst, was du ausschließen darfst, ohne die funktionalität einzuschränken, hast du eventuell zeichen im String, die je nach Ausgabemedium Probleme bereiten können, da sie dort eine funktionelle Bedeutung haben. Du hast jetzt dafür zu sorgen, dass diese Zeichen im Kontext der jeweiligen Ausgabe keine Probleme bereiten.
Beispiel eins: Du speicherst die Eingaben in einer MySQL-Datenbank. Da gäbe es beispielsweise Probleme mit dem hier schon angesprochenen "O'Brien", da das Hochkomma in MySQL als Stringbegrenzer fungiert. Da du einerseits sowieso keine *vollständige* White- bzw. Blacklist zusammenbekommen, andererseits das Zeichen nicht ausschließen kannst, ist die einfachste (und sowieso notwendige) Lösung, die Werte, die du in die Datenbank einträgst, bei der Übergabe an die DB zu maskieren. Bei PHP macht das, dem Kontext MySQL entsprechend, die Funktion mysql_real_escape_string. *Innerhalb* der Datenbank wird der Name so, wie er ist "O'Brien", gespeichert, die Maskierung stellt nur sicher, dass das Hochkomma als Bestandteil des Namens bei der Übergabe an die DB nicht fehlinterpretiert wird.
Beispiel zwei: Du gibst die in der Datenbank vorliegenden Einträge in einem HTML-Dokument aus. Der Kontext heißt hier "HTML" mit seinen Sonderzeichen "<", ">", "&" und innerhalb von Tags/Attributen """. Wieder: Da du schlussendlich nicht weißt, was jemand eingegeben hat, maskierst du alle in das HTML-Dokument eingefügten Strings (bei PHP mit htmlspecialchars). Hat nun jemand versucht, bei der Eingabe JavaScriptcode unterzuschlieben, wird der, da bestimmte Zeichen maskiert sind, als Quellcode ausgegeben, aber eben *nicht* ausgeführt.
Dass das nicht von der Prüfung der Eingaben entbindet, ist klar. Aber so lässt du von dir unberücksichtigte aber "rechtmäßige" Eingaben zu.
Tschö, Auge