当前位置: 首页 > 知识库问答 >
问题:

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

吕亮
2023-03-14

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

我有一个脚本,我想用它从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;

脚本返回

<!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>

省略了两个p标签...

你能帮我找出为什么它跳过了一些标签吗

共有1个答案

朱保赫
2023-03-14

试试这种方式:

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

while ($list->length > 0) {
    $p = $list->item(0);
    $p->parentNode->removeChild($p);
}
 类似资料:
  • 问题内容: 我有这个HTML代码: 但它应该变成(对于所有可能的html标签): 问题答案: 改编自我对类似问题的回答 RegExp细分: 添加一些引号,并使用替换文本,它应该删除标记名之后的所有文本,直到标记结尾或just 为止。 请注意, 这不一定适用于 所有 输入,因为Anti-HTML + RegExp会告诉您。有一些后备功能,最明显的是会失败,还有其他一些坏的问题…我建议将Zend_Fi

  • 问题内容: 我想显示数据库条目的前110个字符。到目前为止很简单: 但是上面的条目中包含由客户端输入的html代码。因此它显示: 显然没有好处。 我只想剥离所有html代码,所以我需要从数据库条目中删除<和>之间的所有内容,然后显示前100个字符。 有任何想法吗? 问题答案: 采用

  • 问题内容: 在我的数据集中,我有一个字段,用于存储用HTML标记的文本。通用格式如下: 我可以尝试通过以下方法解决问题: 但是,这不是严格的规则,因为 某些条目违反了W3C标准, 并且不包含标签。更糟的是, 可能会缺少结束标记 。因此,我需要为每个可能存在的开始和结束标记包括函数。 我想知道是否有比使用多个嵌套函数更好的方法来完成此任务。不幸的是,我在这种环境中只能使用的语言是SQL和Visual

  • 我让用户提交一些文本(包括随机的html图像链接),然后我尝试从文本中的图像创建一个基本的BBCode[img][/img]标记。 我目前的测试方式如下: 字符串(取自随机论坛):

  • 我正在开发一个应该删除命名列的小PowerShell脚本。有没有办法不选择标题为“xyz”的列? 我试图通过 并将结果连接到逗号分隔的字符串中并删除不需要的标头 然后使用

  • 什么是正确的方法来删除只有HTML标签(保留所有自定义/未知的标签)与JSOUP(不是正则表达式)? 预期输入: 预期产出: 我尝试使用白名单清洁剂。none(),但它也会删除自定义标记。 我也尝试过: 但是它也删除了自定义标签。 这个答案对我不好,因为自定义标记的数量是无限的。