寻找可以清理错误HTML的PHP​​脚本

And*_*rew 7 php html-parsing

我正在编写一个PHP命令行脚本,使用Markdownify库将数百个HTML片段转换为Markdown .但是,我遇到过一些情况,我的某些HTML结构不够好,无法与Markdownify一起使用.所以我首先需要通过一些库来发送我的HTML,它可以清理它并添加可选的结束标记等.我将使用HTML的部分块,而不是完整的HTML文档,因此返回的HTML必须是部分的(和不包括doctype等).

您知道可以将HTML转换为XHTML的PHP​​脚本吗?

解:

利用PHP DOMDocument类.它会格式化您的HTML,即使它已被破坏.然后,您可以提取已清理的HTML:

libxml_use_internal_errors(true); //use this to prevent warning messages from displaying because of the bad HTML

$doc = new DOMDocument();
$doc->loadHTML($badHtml);
$goodHtml = $doc->saveHTML();
Run Code Online (Sandbox Code Playgroud)

这将返回一个完整的HTML文档(在body标签中包含已清理的版本),即使我传递了HTML的部分块,因此我可以使用此正则表达式提取已清理的部分:

$goodHtmlPartial = trim(ereg_replace('(.*)<body>(.*)</body>(.*)', '\2', $goodHtml));
Run Code Online (Sandbox Code Playgroud)

Yis*_*Dov 8

有什么理由不使用整洁?

http://php.net/manual/en/book.tidy.php

它可以清理你的HTML,只给你身体部分.

$tidy = tidy_repair_string($content,array(
                           'indent'         => true,
                           'output-html'   => true,
                           'wrap'           => 80,
                           'show-body-only' => true,
                           'clean' => true,
                           'input-encoding' => 'utf8',
                           'output-encoding' => 'utf8',
                           'logical-emphasis' => false,
                           'bare' => true,
                                          ));
Run Code Online (Sandbox Code Playgroud)


Phi*_*hil 5

您可以将HTML加载到DOM中,然后另存为XML.