Мне нужно обработать несколько файлов, которые являются очень старыми файлами SHTML, которые были написаны с использованием некоторых неправильных HTML-тегов.
Например, данная страница будет следовать этой структуре
<!--#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.
Задача ещё не решена.
Других решений пока нет …