阻止DOMDocument关闭标记

时间:2017-10-13 16:26:46

标签: php domdocument malformed shtml

我需要处理多个文件,这些文件是使用某些malform HTML标记编写的非常旧的SHTML文件。

例如,给定页面将遵循此结构

<!--#include virtual="../includes/header.shtml"-->

<title>Welcome</title>
<div class="fudgeLeft">
    <div class="mainContent">
        <link rel="stylesheet" href="../css/style.css">
        <img src="hockeyflag.jpg" alt="">
        <p>text
        <p>text
        <p>more text
    </div>

<!--#include virtual="../includes/footer.shtml"-->
  • header.shtml包含HTML文档的开头标记,包括<body>标记。
  • footer.shtml包括结束</div></body></html>
  • 请注意,页眉和页脚之间的每个标记都显示在不同的行上,而某些标记未正确关闭。

[老实说,我不知道原始开发者在构建这些页面时的想法(或吸烟)。]

无论如何,我编写了一个脚本,使用DOMDocument来清理这些页面,转换一个特定的标记,并将更新的文档保存为新文件。

我遇到的问题是新创建的文件发生了更多变化。

<!--#include virtual="../includes/header.shtml"--><title>Welcome</title><div class="fudgeLeft">

<div class="mainContent">
    <link rel="stylesheet" href="../css/style.css" />
    <img src="hockeyflag.jpg" alt="" />
    <p>text</p>
    <p>text</p>
    <p>more text</p>
</div>

<!--#include virtual="../includes/footer.shtml"--></div>
  • 现在请注意,有些线已被粘合(不是很大),但标签已经关闭。同样,其中一个结束标记位于页脚之后。

所以我的问题是有没有办法配置DOMDocument以保留HTML格式的HTML格式?我的目标是只更改一个标记,但保留当前的丑陋文档。

我的剧本很长但很简短

$doc = new DOMDocument();
@$doc->loadHTMLFile('path-to-shtml-file', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

// convert one tag

$doc->saveHTMLFile('path-to-new-shtml-file');

我正在运行PHP 7。

0 个答案:

没有答案