9

在我的代码中,我使用 openoffice 将一些样式化的 xls 文档转换为 html。然后我使用xml_parser_create. <BR>问题是 openoffice 创建带有未封闭和标签的 oldschool html <HR>,它不创建 doctypes 并且不引用 attributes <TABLE WIDTH=4>

我知道的 php 解析器不喜欢这样,并产生 xml 格式错误。我目前的解决方案是在解析文件之前对文件运行一些正则表达式,但这既不好也不快。

你知道一个(希望包括在内的)php-parser,它不关心这些类型的错误吗?或者也许是修复“损坏”html的快速方法?

4

4 回答 4

8

“修复”损坏的 HTML 的解决方案可能是使用HTMLPurifier (引用)

HTML Purifier 是一个用 PHP 编写的符合标准的 HTML 过滤器库。
HTML Purifier 不仅会使用经过彻底审核、安全且许可的白名单删除所有恶意代码(更广为人知的 XSS),而且 还会确保您的文档符合标准


另一种想法可能是尝试使用(quoting)加载您的 HTML :DOMDocument::loadHTML

该函数解析包含在字符串 source 中的 HTML。与加载 XML 不同,加载HTML 时不必格式正确

如果您尝试从文件加载 HTML,请参阅DOMDocument::loadHTMLFile.

于 2010-02-28T15:40:44.657 回答
4

SimpleHTML

要修复损坏的 HTML,您可以使用Tidy

作为替代方案,您可以使用本机XML Reader。因为它充当文档流上的游标,并在途中的每个节点处停止,所以它不会在无效的 XML 文档上中断。

请参阅http://www.ibm.com/developerworks/library/x-pullparsingphp.html

于 2010-02-28T15:40:41.957 回答
1

您仍在使用 PHP 4 XML API 有什么特别的原因吗?

如果您可以不使用 PHP 5 的 XML API,则有两种可能性。

首先,尝试内置的 HTML 解析器。它真的不是很好(它往往会因格式不佳的 HTML 而窒息),但它可能会奏效。看看 DomDocument::LoadHTML。

第二种选择 - 您可以尝试基于 HTML5 解析器规范的 HTML 解析器:

http://code.google.com/p/html5lib/

这往往比内置的 PHP HTML 解析器工作得更好。它将 HTML 加载到 DomDocument 对象中。

于 2010-02-28T16:27:41.763 回答
0

一个解决方案是使用 DOMDocument。

例子 :

$str = "
<html>
 <head>
  <title>test</title>
 </head>
 <body>
  </div>error.
  <p>another error</i>
 </body>
</html>
";

$doc = new DOMDocument();
@$doc->loadHTML($str);
echo $doc->saveHTML();

优点:原生包含在 PHP 中,与 PHP Tidy 相反。

于 2017-01-11T10:34:05.440 回答