PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bestimmte html tags durchlassen, rest raus werfen


aryos
27.01.2006, 08:15
Hallo zusammen,

ich habe folgendes Problem: Ich möchte einen HTML inhalt per javascript durchparsen, und nur bestimmte tags durchlassen. Einen regulären ausdruck der alle html tags entfernt war leicht zu finden:
/(<([^>]+)>)/ig

Nun bräuchte ich allerdings die gleiche Variante, nur dass man angeben kann welche Tags durchgelassen werden sollen (z.B. <b> <i> <br> <br />...)

Kann mir da jemand weiter helfen?

Vielen Dank schon mal
Chris


Jan Krüger
27.01.2006, 16:37
Eins kann ich dir sofort sagen: es existiert kein regulärer Ausdruck, mit dem du so etwas zuverlässig erledigen kannst, d.h. ich kann dir zu jedem regulären Ausdruck ein Beispiel liefern, bei dem er versagt.

eViL_oNe
29.01.2006, 14:46
phpbb löst das mit einer Liste von HTML-Tags

1. für alle erlaubten HTML Tags wandle HTML Tag in eine Art Platzhalter um
2. wende den allgemeinen Filterungsausdruck für alle Tags an (der deinem entsprechen dürfte)
3. wandle die Platzhalter aus 1 zurück in HTML Tags um

dieses Verfahren ist längst nicht optimal, da performance-lastig, mir fällt jedoch nix besseres dazu ein

aryos
30.01.2006, 07:30
Vielen Dank schon mal für die Tips. Dass das ganze mit Javascript Mitteln schwierig wird war mir zwar bewusst, aber nicht wie schwierig ;-)

Das mit der temporären umwandlung könnte ich mir auch vorstellen, nur wird es dann vermutlich schwierig bei tags mit attributen. Aber werde den Ansatz mal weiter verfolgen.

Andere Frage drum herum: Wie werfe ich per RegEx bestimmte Tags (beginnende und endende Tags) raus? Also praktisch die logischere Richtung. Bsp: Ich möchte alle img, p, und div Tags raus werfen. Dürfen auch gerne mehrere aufrufe der RegEx nacheinander sein,...

Also nochmals vielen Dank an die bisherigen Tips

eViL_oNe
30.01.2006, 08:54
bei Javascript mit replace( pattern, "" )

wobei pattern folgendes ist:

/<(img|p|div)[^>]*>/ig

Jan Krüger
30.01.2006, 09:02
Ne, das klappt nicht so besonders gut; kannst du dann z.B. so umgehen:
<<p>p>Hi</p>

eViL_oNe
30.01.2006, 12:20
Das von dir konstruierte Beispiel lässt sich wohl nur mit einem wiederholten Aufruf der replace-Methode lösen -- über Performance braucht man da ja wohl nicht diskutieren ;)