Этот Perl-скрипт проверяет корректность HTML-блоков. Результат выдаётся в удобочитаемой форме с номерами строк и отступами, показывающими глубину вложения конструкций.
Внимание, это очень старый скрипт. Но был написан лет десять-пятнадцать назад. С тех пор появилось множество качественных средств проверки HTML-кода. Однако, множество людей продолжает пользоваться этим скриптом. Возможно, у них есть на то веские причины, но я бы советовал новым потенциальным пользователям внимательно изучить альтернативные решения. Сам я пользуюсь им очень редко. Хотя, случается.
Сейчас он настроен на очень
строгую проверку. Закрывающий тег должен быть и у тега <p>
, и
у <td>
, и у <li>
, но это легко отрегулировать, чуть подправив код.
Никаких дополнительных модулей этот скрипт не требует.
Новая версия (август 2006) корректно пропускает PHP- и SSI-код.
Но конечно этот код не выполняется. Чтобы проверить корректность
любых динамических документов мой валидатор можно использовать
совместно с программой wget
(или любой подобной):
wget -qO- http://ya.ru/ | html
или, для более удобного просмотра результатов:
wget -qO- http://ya.ru/ | html | less
Из недостатков:
STDIN
.<
, >
. Например, такой код считается ошибочным:<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>
.)
Если вы хотите получить ответ, дополняйте ваше сообщение комментариями и обратным адресом.