繁体   English   中英

在PHP中解析格式错误的HTML

[英]Parsing of badly formatted HTML in PHP

在我的代码中,我使用openoffice将一些样式的xls文档转换为html。 然后我使用xml_parser_create解析表。 问题是openoffice使用未关闭的<BR><HR>标签创建oldschool html,它不创建doctypes并且不引用属性<TABLE WIDTH=4>

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

你知道一个(希望包括在内)php解析器,它不关心这些错误吗? 或者也许是一种快速修复'破坏'html的方法?

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

HTML Purifier是一个用PHP编写的符合标准的HTML过滤器库。
HTML Purifier不仅会删除所有恶意代码(更好地称为XSS),而且还会通过经过全面审核,安全且允许的白名单, 还可以确保您的文档符合标准


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

该函数解析字符串源中包含的HTML。 与加载XML不同, HTML不必加载良好。

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

SimpleHTML

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

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

访问http://www.ibm.com/developerworks/library/x-pullparsingphp.html

您还在使用PHP 4 XML API的任何特殊原因?

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

首先,尝试内置的HTML解析器。 它真的不是很好(它往往会扼杀格式不佳的HTML),但它可能会成功。 看看DomDocument :: LoadHTML。

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

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

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

解决方案是使用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相反。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM