Avatar billede dugi Nybegynder
06. juli 2009 - 09:17 Der er 3 kommentarer

Fange html-tags - også nestede

Hej alle,

Nu ligger sådan, at jeg skal have lavet en regex, som går ind og fanger HTML-tags. Også når de er nestede.

Det hele bunder ud i, at jeg skal lave en funktion der en string om til html entities, pånær dem man har listet i sit array.

Jeg har tidligere haft en regex der virkede, men problemet var bare at den ignorede attributes. F.eks. hvis jeg ville ignorer a-tagget, så fjernede den min href-attribute også er a-tagget jo ligegyldigt.

Den funktion havde som virkede (men som fjernede attributes) ser således ud:
---------------
$str = htmlentities($str);
$str = eregi_replace("<(/?) *(" . implode('|', $allowedTags) . ") *(/?)>", '<\\1\\2\\3>', $str);
---------------


Jeg er ingen regex ekspert what-so-ever, men jeg har da prøvet mig frem og har fået lavet en der NÆSTEN klare jobbet:
---------------
$allowedTagsString = implode('|', $allowedTags);
$str = preg_replace('/<(' . $allowedTagsString .')\b([^>]*)>(.*?)<\/(' . $allowedTagsString .')>/i', self::lt . '\1\2' . self::gt .'\3' . self::lt .'/\4' . self::gt, $str);
---------------

Problemet med min nye funktion er bare, at den f.eks. ikke matcher på <br/> og jeg er ikke sikker på, at den kan klare nested tags.

Så hvis der er en regex guru, der har tid og lysten til at hjælpe og tage udfordringen op, så vil jeg være evigt lykkelig :D

På forhånd mange tak.
- DuGi
Avatar billede montago Praktikant
06. juli 2009 - 12:25 #1
Jeg har lavet en komplet Regex som splitter et HTML (XML) dokument til atomer...

og en parser som kan æde den bagefter...

kig på http://mdk2002.dyndns.org/mdkeditor/editor/parsers.js

find funktionen: htmlParser()

hvis du fodre funktionen med dit dokument:
eks: htmlParser("<html>...</html>");
bliver hele strengen parsed

du kan så tilpasse parseren til at gøre hvad du har brug for... eller nøjes med at tage Regex'en
Avatar billede montago Praktikant
06. juli 2009 - 12:26 #2
nb: Chrome 2.0 skal bruge samme Regex som Firefox3
Avatar billede montago Praktikant
06. juli 2009 - 12:27 #3
Jeg vil anbefale at kigge på XML parseren til at starte med... den er noget simplere at forstå end HTML parseren....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester