PHP解析无效的HTML

9
我正在尝试解析一些不在我的服务器上的HTML。
    $dom = new DOMDocument();
    $dom->loadHTMLfile("http://www.some-site.org/page.aspx");      
    echo    $dom->getElementById('his_id')->item(0);

但是PHP返回了一个错误,类似于ID his_id已在http://www.some-site.org/page.aspx的第33行定义。我认为这是因为DOMDocument正在处理无效的HTML。那么,即使无效,我该如何解析它呢?

3个回答

9
你需要在解析之前运行HTML Tidy来清理它。请访问HTML Tidy了解更多信息。
$html = file_get_contents('http://www.some-site.org/page.aspx');
$config = array(
  'clean' => 'yes',
  'output-html' => 'yes',
);
$tidy = tidy_parse_string($html, $config, 'utf8');
$tidy->cleanRepair();
$dom = new DOMDocument;
$dom->loadHTML($tidy);

请查看选项列表


可惜我没有安装 tidy :( - kmunky
@kmunky 为什么不呢?没有Tidy,你基本上就是一无所有了。 - cletus
我解决了这个问题...我已经安装了php_tidy,但是我遇到了以下错误:“实体中已定义ID top,在第52行”。 - kmunky
重复的 id,你需要自己修复它们(我已经经历过这一点了)。 - Andras Gyomrey

2

如果你只是想推荐一个链接,请在问题下面以评论的形式进行,而不要发布为答案。 - mickmackusa

0
阅读文档,我看到一个默认为TRUE的$dom->strictErrorChecking。如果将$dom->strictErrorChecking = false,会发生什么?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接