0

我需要处理多个文件,这些文件是使用一些格式错误的 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>s </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 原样?我的目标是只更改一个标签,但保持丑陋的文档不变。

我的剧本很长,但简而言之

$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。

4

0 回答 0