Tom123: Reguläre Ausdrücke - HTML validieren

Hallo,
ich arbeite gerade an einem CMS. Für den Benutzer soll die Texteingabe möglichst einfach sein. Deswegen würde ich gerne alle < und > mit &lt; bzw. &gt; ersetzten, die nicht zu einem HTML-Tag gehören.

Mit perlkompatiblen regulären Ausdrücken habe ich etwas Erfahrung, aber irgendwie schein bei dieser Verwendung der Wurm drin zu sein. Hat jemand eine Idee?

Das und einige andere Möglichkeiten habe ich schon versucht:

$str = preg_replace("/<^(p|h1|a)/", "&lt;", $str);
$str = preg_replace("/.^(p|h1|a)/", "&gt;", $str);

Leider funktioniert das nicht.

Gruß
Tom

  1. Moin Moin!

    Hallo,
    ich arbeite gerade an einem CMS. Für den Benutzer soll die Texteingabe möglichst einfach sein. Deswegen würde ich gerne alle < und > mit &lt; bzw. &gt; ersetzten, die nicht zu einem HTML-Tag gehören.

    Zuerst einmal maskiere alle &, dann erst <, > und ".

    Überlege, wie viel HTML du zulassen willst. HTML hat aufgrund seiner SGML-Abstammung ein paar Eigenarten, die nicht gleich offensichtlich sind.

    Läßt Du Leerzeichen zu? Wo? Welche? Welche HTML-Elemente erlaubst Du? Alle oder nur eine kleine Auswahl?

    HTML ist mit ein oder zwei RegExps nicht zu validieren. Siehe z.B. perlfaq9

    CMS impliziert, dass Du einen eingeschränkten Benutzerkreis hast. Kannst Du sicher sein, dass alle Benutzer einen halbwegs aktuellen Browser haben, dessen Einstellungen Du mehr oder weniger vorgeben kannst?

    Dann wäre ein WYSIWYG-Editor-Feld im Browser vielleicht eine Alternative zu einem "nackten" Textfeld, ganz nebenbei erzeugt das das notwendige Escaping gleich selbst.

    PHPBB-Code-artige Tags werden gerne statt HTML genommen, weil man sie strikter definieren kann als HTML, z.B. keine Leerzeichen zwischen öffnender Klammer und Buchstaben und zwischem letzten Zeichen und schließender Klammer. Das macht die RegExp deutlich einfacher.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".