当前位置:  开发笔记 > 编程语言 > 正文

错误容忍PHP中的HTML/XML/SGML解析

如何解决《错误容忍PHP中的HTML/XML/SGML解析》经验,为你挑选了1个好方法。

我有一堆类似HTML的遗留文档.就像在,它们看起来像HTML,但有其他组成的标签,不是HTML的一部分

This is an example of a fake tag

我需要解析这些文件.PHP是唯一可用的工具.这些文档并不接近于格式良好的XML.

我最初的想法是在PHP DOMDocument上使用loadHTML方法.但是,这些方法会阻塞化妆HTML标记,并拒绝解析字符串/文件.

$oDom = new DomDocument();
$oDom->loadHTML("This is an example of a fake tag");
//gives us
DOMDocument::loadHTML() [function.loadHTML]: Tag pseud-template invalid in Entity, line: 1 occured in ....

我能够想到的唯一解决方案是使用字符串替换函数预处理文件,这些函数将删除无效标记并将其替换为有效的HTML标记(可能是标记名称为id的span).

有更优雅的解决方案吗?让DOMDocument知道其他标记被认为是有效的方法吗?是否有针对PHP的不同的,强大的HTML解析类/对象?

(如果不明显,我不认为正则表达式是一个有效的解决方案)

更新:假标签中的信息是此处目标的一部分,因此像Tidy这样的东西不是一个选项.另外,我正在处理一些对我来说具有某种程度(如果不是全部)格式良好清理的东西,这就是为什么我首先要查看DomDocument的loadHTML方法.



1> troelskn..:

您可以libxml_use_internal_errors在加载文档时禁止显示警告.例如.:

libxml_use_internal_errors(true);
$doc = new DomDocument();
$doc->loadHTML("This is an example of a fake tag");
libxml_use_internal_errors(false);

如果出于某种原因需要访问警告,请使用 libxml_get_errors


你应该等几个星期,你可以得到"两年后的正确答案徽章!"
推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有