Hallo neuer Tag, hallo Forum,
Diverse HTML-Tags sind zugelassen. (welche da gefährlich werden könnten, ist mir auch noch nicht ganz klar)
In jedem Fall über eine Positivliste, also alles ausschließen, was du nicht explizit erlaubst. Keine style-Attribute zulassen, sonst kann man ja fast alles machen (z.B. "display:hidden")
soweit so gut. Ich werde bestimmt strip_tags($eingabe,$allowed_taglist); benutzen.
Ich hatte da mal eine schöne Lösung für PHP in der Art (schreibe aus dem Gedächtnis:
$text = str_replace("<b>","|b|",$text);
$text = strip_tags($text);
$text = html_entities($text);
$text = str_replace("|b|","<b>",$text);
Also zuerst alle erlaubten Tags in ein eigenes Format umwandeln (die pipe | eignet sich hier, weil es selten vorkommt und von html_entities nicht umgewandelt wird), alle verbleibenden Tags löschen, sonderzeichen ersetzen und die erlaubten Tags wieder zurückwandeln. Erschien mir ziemlich sicher. Mit einem Array voller erlaubter Tags und einer foreach-Schleife auch schön zu automatisieren.
Ich dachte daran, dass es vielleicht sowas wie "<clear all> gibt und dass dann die Standard-CSS-Angaben für die Seite wieder gelten. Kann ich das nicht irgendwie mit <div class="normal"> oder so erreichen. Wenn ich nach der Anzeige des Inhaltes der Textarea so ein "Normal-CSS" benutze, müssten dadurch doch alle vorherigen Formatierungen wieder ausser Kraft gesetzt sein, oder?
Vielleicht meinst du <br clear='all' />, das beendet aber nur ein vorhergehendes align. Das Problem ist, das <div class='normal'> CSS ist, <b> aber HTML.
Oh, oder gibt es doch eine Lösung: wenn du das <b> in ein <span style="font-weight:bold"> umwandelst könnte das gehen. Hab das gerade nur mit Mozilla getestet, und da funktionierts:
<div>
<span style="font-weight:bold">Fett
</div>
<div style="font-weight:normal;">
Nicht Fett
</div>
Hoffe, das hilft.
Gruß
Heizer