Удаление некорректной или нестандартной разметки HTML

Удаление некорректной или нестандартной разметки HTML

В имеющейся разметке HTML присутствует некорректный синтаксис, который нужно удалить . Подобная чистка упрощает разбор и гарантирует, что создаваемые страницы соответствуют  тандартам.

Воспользуйтесь расширением PHP Tidy. Это расширение при помощи популярной мощной библиотеки HTML Tidy превращает хаотичную мешанину из тегов в синтаксически корректную, соответствующую стандартам разметку HTML или XHTML. Пример  показывает, как исправить некорректный файл.

В библиотеке HTML Tidy за прошедшее время были собраны многочисленные правила и функции для исправления разнообразных нарушений HTML. К счастью, чтобы пользоваться Tidy, вам не нужно знать об этих правилах. Просто передайте имя файла функции tidy_repair_file() , и вы получите исправленную версию. Допустим, файл bad.html содержит следующую разметку:

Листинг записывает в файл good.html следующую разметку:

Решение Tidy содержит множество конфигурационных параметров, влияющих на генерируемый результат. Параметры передаются tidy_repair_file() во втором аргументе, который содержит массив параметров и значений. В листинге используется параметр output-xhtml , который приказывает Tidy сгенерировать действительную разметку XHTML. Листинг Генерирование XHTML с использованием Tidy

Код записывает в good.xhtml следующий вывод:

Если источником является строка, а не файл, используйте tidy_repair_string(). Функция получает первый аргумент с разметкой HTML, а не имя файла. Исправленный код XHTML, сгенерированный Tidy, также предоставляет возможность пометки HTML без использования регулярных выражений. После того как разметка HTML будет преобразована в синтаксически корректный документ XHTML, ее можно корректно обработать и преобразовать функциями PHP DOM. В коде показано, как это делается. Разметка веб-страницы средствами Tidy и DOM

Тут команда preg_replace() для добавления разметки применяется ко всем текстовым узлам дерева DOM, полученного при загрузке исправленной версии входной разметки HTML в объект DOMDocument . А самое замечательное — мы можем быть уверены в том, что замена применяется только к тексту. Любая некорректная разметка HTML, которая могла бы сбить с толку регулярное выражение для поиска HTML в коде, будет исправлена Tidy до создания объекта DOMDocument. Недостаток такого решения заключается в том, что в зависимости от степе-
ни ­некорректности входной разметки HTML результат преобразования Tidy может оказаться не таким, какой вы ожидаете. Вот какой результат выдает код:

Обратите внимание на последнюю часть: herring
is not a real HTML element! .
Поскольку не является действительным элементом XHTML, Tidy удаляет и , оставляя внутренний текст. Это разумная мера для получения действительного документа XHTML, но если вы к ней не готовы, она может стать неприятным сюрпризом.