DOM php按标记名删除所有标记

DOM php按标记名删除所有标记,php,html,dom,Php,Html,Dom,我在使用一段时间的脚本时遇到了问题,在遇到这个问题之前它一直对我有效 我有一个脚本,我想用它从html源代码中删除所有p html标记。 该脚本确实可以工作,部分原因是它只删除了一些p标记,但遗漏了一些 我不明白为什么会这样 $doc = new DOMDocument(); $a = <<<FAIL <html><body> <div style="clear:both"></div> <p class="article

我在使用一段时间的脚本时遇到了问题,在遇到这个问题之前它一直对我有效

我有一个脚本,我想用它从html源代码中删除所有p html标记。 该脚本确实可以工作,部分原因是它只删除了一些p标记,但遗漏了一些

我不明白为什么会这样

$doc = new DOMDocument();

$a = <<<FAIL
<html><body>
<div style="clear:both"></div>
<p class="articletitle">hoo</p>
<p class="articletext">hmmm</p>
<p class="articletext">hmmmm</p>
<p align="center"></p>
</body></html>
FAIL;

$doc->loadHTML($a);
$list = $doc->getElementsByTagName("p");

foreach ($list as $l) {
$l->parentNode->removeChild($l);
$c++;
}
echo $doc->saveHTML() . $c;
$doc=newDOMDocument();
$a=parentNode->removeChild($l);
$c++;
}
echo$doc->saveHTML()$C
脚本返回

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<div style="clear:both"></div>

<p class="articletext">hmmm</p>

<p align="center"></p>

hmmm

漏掉两个p标签

您能帮我找出它跳过某些标记的原因吗?

请尝试以下方法:

$doc->loadHTML($a);
$list = $doc->getElementsByTagName("p");

while ($list->length > 0) {
    $p = $list->item(0);
    $p->parentNode->removeChild($p);
}

有人使用herdoc,真是奇迹。一般来说,你应该从树的底部向上删除节点,而不是像现在这样从上到下删除节点。如果在搜索完成后修改树,DOM搜索操作的结果将变得未定义。