☰ Оглавление

Простой HTML-валидатор

Этот Perl-скрипт проверяет корректность HTML-блоков. Результат выдаётся в удобочитаемой форме с номерами строк и отступами, показывающими глубину вложения конструкций.

Внимание, это очень старый скрипт. Но был написан лет десять-пятнадцать назад. С тех пор появилось множество качественных средств проверки HTML-кода. Однако, множество людей продолжает пользоваться этим скриптом. Возможно, у них есть на то веские причины, но я бы советовал новым потенциальным пользователям внимательно изучить альтернативные решения. Сам я пользуюсь им очень редко. Хотя, случается.

Сейчас он настроен на очень строгую проверку. Закрывающий тег должен быть и у тега <p>, и у <td>, и у <li>, но это легко отрегулировать, чуть подправив код.

Никаких дополнительных модулей этот скрипт не требует.

Новая версия (август 2006) корректно пропускает PHP- и SSI-код. Но конечно этот код не выполняется. Чтобы проверить корректность любых динамических документов мой валидатор можно использовать совместно с программой wget (или любой подобной):

wget -qO- http://ya.ru/ | html

или, для более удобного просмотра результатов:

wget -qO- http://ya.ru/ | html | less

Из недостатков:

<script type="text/javascript">
if (a>b) {}
</script>

Я не планирую изменять это поведение потому, что такой код действительно ошибочен и в некоторых случаях даже браузеры не могут обойти эту ошибку. Правильное решение — использовать HTML-комментарии

<script type="text/javascript"><!--
if (a>b) {}
// --></script>

или (на худой конец) квотировать запрещённые символы.

Этот чекер проверяет именно HTML, но не XML. Он не поддерживает «самозакрывающиеся» теги (такие как <br/>), он не поддерживает обработку <!ELEMENT ...>, он не поддерживает <![CDATA[...> и прочие XML-специфичные конструкции.

Пока я не планирую добавлять в этот валидатор XML-проверки. Мне представляется более разумным делать разные валидаторы для XML и HTML, но для XML и без меня существует множество достойных валидаторов.

Изменения:

Правка от февраля 2009 года — тег <map> стал парным и символы '\r' не ломают форматирование отчёта об ошибках.

Правка — август 2009 года — улучшена обработка пробелов в PHP-коде и HTML-комментариях.

Последняя от сентября 2009 года — улучшена обработка пробелов, включая табуляции и символ '\r'. Исправлена ошибка, приводившая к не правильному подсчёту номеров строк.

Правка от декабря 2009 года — теги <embed> и <param> стали не парными.

Спасибо всем пользователям за комментарии!

Скачать

Прежде, чем писать об обнаруженной ошибке, убедитесь, что вы пользуетесь последней версией скрипта. Последнее время 90% жалоб относятся к давно исправленным ошибкам.

Коллеги из Уфы, Киева, Минска, Москвы и прочие товарищи, которые присылают только HTML-код. Обращаюсь персонально к вам. Я больше не буду рассматривать подобные послания. Практика показывает, что 99% этих сообщений абсолютно не информативны. (За последние сутки: 178.125.115.238 — ваш HTML нормально разбирается, обновите скрипт; 195.239.220.99 — мой скрипт не разбирает атрибуты тегов, пользуйтесь более мощными средствами; 195.230.73.2 — что вас не устраивает? обновите скрипт; 91.200.225.174 — почитайте сообщения скрипта и закройте теги <td>.)

Если вы хотите получить ответ, дополняйте ваше сообщение комментариями и обратным адресом.