Felix Riesterer: strip_tags soll auch javacript löschen

Beitrag lesen

Lieber Christian,

ich glaube, Du hast da etwas übersehen...

$scripts = $dom->getElementsByTagName('script');

foreach($scripts as $item) {
  $item->parentNode->removeChild($item); 
}

getElementsByTagName liefert eine live node list zurück! Im Grunde müsste man das so schreiben:

$scripts = $dom->getElementsByTagName('script');

while ($scripts->length) {
    $scripts->item(0)->parentNode->removeChild($scripts->item(0));
}

Zumindest war es meine Erfahrung, dass Du in einer simplen For-Schleife mit einer live node list nur dann Erfolg hast, wenn Du sie von hinten(!) abarbeitest, da das Entfernen des ersten Items dazu führt, dass die Liste neu geordnet wird und wieder ein erstes Element hat:

$scripts = $dom->getElementsByTagName('script');

for ($i = $scripts->length; $i >= 0; $i--) {
  $scripts->item($i)->parentNode->removeChild($scripts->item($i));
}

Da finde ich die While-Schleife dann aber doch intuitiver - und man spart sich eine Variable.

Liebe Grüße,

Felix Riesterer.