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