gpt4 book ai didi

php - PHP 中的容错 HTML/XML/SGML 解析

转载 作者:太空狗 更新时间:2023-10-29 15:36:43 26 4
gpt4 key购买 nike

我有一堆类似 HTML 的遗留文档。比如,它们看起来像 HTML,但是有额外的组成标签,这些标签不是 HTML 的一部分

<strong>This is an example of a <pseud-template>fake tag</pseud-template></strong>

我需要解析这些文件。 PHP 是唯一可用的工具。这些文档远不是格式正确的 XML。

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

$oDom = new DomDocument();
$oDom->loadHTML("<strong>This is an example of a <pseud-template>fake tag</pseud-template></strong>");
//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 方法的原因。

最佳答案

您可以使用 libxml_use_internal_errors 抑制警告, 在加载文档时。例如:

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

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

关于php - PHP 中的容错 HTML/XML/SGML 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com