PHP 中的 DOM 操作

DOM manipulation in PHP

提问人:Eldila 提问时间:8/26/2008 最后编辑:Ijas AmeenudeenEldila 更新时间:1/18/2019 访问量:8835

问:

我正在寻找在PHP中操作HTML的好方法。例如,我目前遇到的问题是处理格式错误的 HTML。

我收到的输入如下所示:

<div>This is some <b>text

正如你所注意到的,HTML 缺少结束标记。我可以使用正则表达式或XML解析器来解决这个问题。但是,将来我可能不得不进行其他 DOM 操作。我想知道是否有任何好的 PHP 库可以处理 DOM 操作,类似于 Javascript 处理 DOM 操作的方式。

php html dom

评论

0赞 TRiG 11/2/2010
在对它做任何其他事情之前,我会通过 HTML Purifier 运行格式错误的 HTML。

答:

11赞 ceejayoz 8/26/2008 #1

PHP 有一个 PECL 扩展,可让您访问 HTML Tidy 的功能。Tidy 是一个非常强大的库,它应该能够接受这样的代码并以智能的方式关闭标签。

我用它来清理分类广告系统在导入之前发送给我的格式错误的 XML 和 HTML。

1赞 Juan 8/26/2008 #2

对于操作 DOM,我认为您正在寻找的是这个。我曾经从网络上解析 HTML 文档,它对我来说效果很好。

6赞 bedlam 2/3/2009 #3

我发现 PHP Simple HTML DOM 是迄今为止最有用和最直接的库。我会说比 PECL 更好。

我写了一篇关于如何使用它来抓取myspace艺术家巡演日期的文章(只是一个例子。这是 php 简单 html dom 解析器的链接。

3赞 Decko 11/29/2010 #4

现在内置的 DOM 库可以轻松解决这个问题。loadHTML 方法将接受格式错误的 XML,而 load 方法则不接受。

$d = new DOMDocument;
$d->loadHTML('<div>This is some <b>text');
$d->saveHTML();

输出将为:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
  <body>
    <div>This is some <b>text</b></div>
  </body>
</html>

评论

0赞 Kevin Newman 4/5/2017
我在这里输入了一个类似的答案,其中详细介绍了字符串编码以及如何提取文档片段