PHP DOMDocument未删除所有元素

PHP DOMDocument未删除所有元素,php,domdocument,Php,Domdocument,我想删除所有script元素,这里是代码 <?php $pageFile = <<<EOF <!DOCTYPE html><html><body> <script src="aa"></script> <script src="bb"></script> <script src="cc"></script> <div>aaa</div> &l

我想删除所有
script
元素,这里是代码

<?php
$pageFile = <<<EOF
<!DOCTYPE html><html><body>
<script src="aa"></script>
<script src="bb"></script>
<script src="cc"></script>
<div>aaa</div>
</body></html>
EOF;

$dom = new DOMDocument();
$dom->loadHTML($pageFile);

foreach ($dom->getElementsByTagName('script') as $item) {
  $item->parentNode->removeChild($item);
}
$pageFile = $dom->saveHTML();
echo $pageFile;

$dom->getElementsByTagName
返回的
DOMNodeList
是“活动的”。因此,当您删除脚本时,它将从节点列表中删除,并且列表中的所有元素将其索引下移。然后,for的
循环转到下一个索引,最后它跳过其他元素

首先将节点列表转换为数组

foreach (iterator_to_array($dom->getElementsByTagName('script')) as $item) {
  $item->parentNode->removeChild($item);
}

如果向后迭代,则可以修改甚至删除DOMNodeList中的节点: 使用:


foreach (iterator_to_array($dom->getElementsByTagName('script')) as $item) {
  $item->parentNode->removeChild($item);
}
<?php
$pageFile = <<<EOF
<!DOCTYPE html><html><body>
<script src="aa"></script>
<script src="bb"></script>
<script src="cc"></script>
<div>aaa</div>
</body></html>
EOF;

$dom = new DOMDocument();
$dom->loadHTML($pageFile);
$elements = $dom->getElementsByTagName('script');
for ($i = $elements->length; --$i >= 0; ) {
  $elem = $elements->item($i);
  $elem->parentNode->removeChild($elem);
}
$pageFile = $dom->saveHTML();
echo $pageFile;