Предотвратить DOMDocument от закрытия тегов

Мне нужно обработать несколько файлов, которые являются очень старыми файлами 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.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]