Ошибки, часто встречающиеся при валидации XHTML

Амперсанд ("&")

Пример:
<a href="index.php?pid=1&id=2">...</a>

Вероятное сообщение валидатора: Unknown entity...

Что делать: Всегда использовать &amp; вместо &.

Правильно:
<a href="index.php?pid=1&amp;id=2">...</a>


Неправильная вложенность элементов

Пример:
<strong><em>...</strong></em>

Вероятное сообщение валидатора: Missing </em> tag

Что делать: В XHTML элементы должны быть закрыты в порядке, обратном их открытию.

Правильно:
<strong><em>...</em></strong>


Весь DOCTYPE написан в нижнем регистре

Пример:
<!doctype html public "-//w3c//dtd xhtml 1.0 strict//en"
"http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd" >

Вероятное сообщение валидатора: Missing DOCTYPE

Что делать: DOCTYPE регистрозависим, надо писать правильно.

Так::
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >


Отсутствует закрывающий " /"

Пример:
<img src="image.gif" width="100" height="100" alt="Logo">

Вероятное сообщение валидатора: Missing closing tag

Что делать: Так называемые "пустые элементы", например img или br, должны заканчиваться"/" c пробелом перед ним.

Правильно::
<img src="image.gif" width="100" height="100" alt="Logo" />


Тэги в верхнем регистре

Пример:
<STRONG><EM>...</EM></STRONG>

Вероятное сообщение валидатора: There is no such element...

Что делать: Использовать написание в нижнем регистре для всех HTML элементов и названий атрибутов. В XHTML документах все элементы и атрибуты должны быть в нижнем регистре. Это важно потому, что XML регистрозависим и для него <em> и <EM> разные тэги.

Правильно::
<strong><em>...</em></strong>


Значения атрибутов не в кавычках

Пример:
<td rowspan=3>

Вероятное сообщение валидатора: Missing " "

Что делать: Все значения атрибутов должны быть в кавычках.

Правильно::
<td rowspan="3">


У img отсутствует атрибут alt

Пример:
<img src="/images/pic.jpg" width="100" height="100" />

Вероятное сообщение валидатора: required attribute "alt" not specified

Что делать: У всех тегов img должен быть атрибут alt, значение атрибута можно оставить пустым, если избражение является элементом оформления.

Правильно::
<img src="/images/pic.jpg" width="100" height="100" alt="" />

Common XHTML Validation Errors



Много комментариев (30) к “Ошибки, часто встречающиеся при валидации XHTML”

  1. korchasa :

    Про регистрозависимость тэгов.
    Почему пример не будет работать, если в нем и открывающиеся, и закрывающиеся тэги в одном регистре?

    Что делать: Так называемые “пустые элементы”, например img или br, должны заканчиваться пробелом перед “/”.

    Может лучше так:

    Что делать: Так называемые “пустые элементы”, например img или br, должны заканчиваться “/” c пробелом перед ним.

    Логичнее, с точки зрения названия


  2. Баранов Андрей :

    korchasa, спасибо, текст поправил.

    А про нижний регистр:

    http://www.w3.org/TR/2002/REC-xhtml1-20020801/#h-4.2

    4.2. Element and attribute names must be in lower case

    XHTML documents must use lower case for all HTML element and attribute names. This difference is necessary because XML is case-sensitive e.g. <li> and <LI> are different tags.

    В XHTML документах все элементы и атрибуты должны быть в нижнем регистре.


  3. korchasa :

    Спасибо, за статью, теперь понял откуда у меня иногда вываливались ошибки валидации.

    Хотя я все равно не понимаю как из

    XML is case-sensitive e.g. and are different tags.

    следует

    XHTML documents must use lower case for all HTML element and attribute names

    Ведь код:
    Привет, мир!
    XML-валиден. Так бы и написали, что “во избежания недоразумений”


  4. korchasa :

    2Модератор:
    Сорри, забыл сущьности заменить – тэги пропали


  5. Elf :

    > XML-валиден. Так бы и написали, что “во избежания недоразумений”

    Во избежание нарушения DTD, именно в котором тэги и прописаны нижним регистром.


  6. Elf :

    Кстати, бывают тоже достаточно интересные и несразупонимаемые ошибки.
    Например, пустой ol/ul.

    Валидатор ругается на такой код:


    <ul></ul>


  7. korchasa :

    >> XML-валиден. Так бы и написали, что “во избежания недоразумений”
    >Во избежание нарушения DTD, именно в котором тэги и прописаны нижним регистром.

    Вот мне и интересно зачем их там так прописали! Зачем ограничивать себя, если можно этого не делать?

    Просто я привык их писать заглавными, чтобы оформление отделялось от контента.


  8. Voldar :

    2 korchasa
    Дело в том, что xhtml, в отличии от html – это диалект xml-а. А xml с самого начала был регистрозависим.

    По теме поста.
    Часто из-за отсутствия alt у img документ не валидируется, приходится ставить alt=”", хотя это и не совсем правильно с точки зрения здравого смысла – не все картинки испольуются для передачи информации, часть из них это просто оформление.


  9. Баранов Андрей :

    Voldar, спасибо, про alt действительно так и есть, добавлю.


  10. Максим Россомахин :

    Voldar, если у вас присутствуют картинки оформительского характера — сделайте их фоновыми изображениями. А всё, что несёт хоть какой-то смысл, пусть имеет alt. Так порядка больше.


  11. Mons :

    2 korchasa:
    как уже тут было сказано, XTML отличается от просто XML описанием DTD (Document Type Definition). да, в XML EM и em разные теги, но и тот и другой валиндый, а для XHTML DTD описывает существование тегов только в нижнем регистре.
    В принципе, насколько я помню, можно самому дополнить таблицу DTD и тем самым разрешить использование тех или иных entity.
    например для чистого XML’я часто подключают DTD от HTML, для того, чтобы использовать такие вещи, как &bull; &mdash; и т.п.


  12. Voldar :

    Максим, мы так и делаем :). Но изредка бывают моменты когда бекграундом оно не решается.
    Просто у меня еще свежи воспоминания, как мы с валидируемостью бились когда только-только о ней задумываться начали ;). На тот момент alt у картинок занимал не последнее место в списке “любимых граблей”.


  13. Wizard :

    В принцыпе всё известное…
    Наверное, потому что это есть на W3С, хотя не всем же удобно а английском.
    2AKS_
    Не зыбывайте двойные ковычки :)


  14. Виталий :

    Есть и намного более интересный ошибки, причем менее очевидные (для людей ни разу не видевших DTD). Нпример поля форм обязательно должны быть помещены в элемент блочного типа. Тоже самое и для элемента body – первый дочерний элемент тоже должен быть блочного типа.


  15. Павел Владимирович :

    В xHTML гораздо больше мелких ошибок, на которые мы почти не обращаем внимания…


  16. Hermann :

    А самое интересное то, что изучив и научивщись писать самому DTD, можно легко верстать не по документации, а именно по декларации DTD.


  17. Suor :

    У меня такой вопрос валидатор (xhtml 1.1 и xhtml 1.0 strict) ругается на ul, вложенный непосредственно в ul – говорит: “document type does not allow element “ul” here; assuming missing “li” start-tag.”. При этом если li туда прописать, то в браузере естественно появляется маркер, который мне там совсем не нужен.


  18. Баранов Андрей :

    Suor, укажите для UL style=”list-style: none;” – это уберет маркеры, а дочерним элементом у UL все-таки должен быть LI, если хотите, чтобы код соответствовал стандарту


  19. Beastie :

    почему валидатор выдаёт ошибку на линк?
    123
    в целом всё выглядит вот так…

    –>
    сообщение валидатора.. “Error Line 9 column 18: document type does not allow element “a” here; missing one of “p”, “h1″, “h2″, “h3″, “h4″, “h5″, “h6″, “div”, “pre”, “address”, “fieldset”, “ins”, “del” start-tag.”


  20. Beastie :

    почему валидатор выдаёт ошибку на линк?
    [a href="123.html"]123[/a]
    в целом всё выглядит вот так…
    [!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"]
    [html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"]
    [head]


  21. Баранов Андрей :

    Тоже самое и для элемента body – первый дочерний элемент тоже должен быть блочного типа

    Собственно, валидатор и сообщает о том, что ссылку следует поместить внутрь какого-нибудь из перечисленных элементов.


  22. Beastie :

    т.е. если я хочу получить валидный XHTML 1.0 Strict
    все линки должны писаться таким образом?
    [div][a href=""][/a][/div]


  23. Баранов Андрей :

    Не совсем. Достаточно сделать один контейнер div и внутри него разместить остальное содержимое страницы:

    [body]
    [h1][a href="#"][/a][/h1]
    [a href="#"][/a]
    [div]
    [a href="#"][/a]
    [p][a href="#"][/a][/p]

    [span][a href="#"][/a][/span]
    [/div]
    [body]

    т.о. первым дочерним для body будет блочный div, а внутри его можно разместить строковый А


  24. Евгений :

    “Значеня атрибутов не в кавычках” – значенИя, исправьте, пожалуйста ;)


  25. Баранов Андрей :

    Спасибо, не заметил.


  26. Вячеслав Седов :

    картинки, которые не являются контентом, а являются элементом оформления по идее надо в css загонять


  27. KPETuH :

    чем заменить target? не сильно разбираюсь в CSS там аналога не нашел…


  28. Вадим :

    Добрый день. Хотел поинтересоваться по такому вопросу:

    Немогу ни где на форуме встроить тэги от до т.к. валидатор ругается слудующими словами:
    document type does not allow element "h3" here; missing one of "object", "applet", "map", "iframe", "button", "ins", "del" start-tag. Как бороться этой проблемой не смог понять. Если есть выход из создавшейся ситуации – буду очень признателен если ответите. Заранее спасибо, с уважением, Вадим.


  29. Вадим :

    Система комментариев заблокировала текст, поэтому напишу начало занова:

    Немогу ни где на форуме встроить тэги от до т.к. валидатор ругается …


  30. Вадим :

    от [h1][/h1] до [h3][/h3] (скобки заменил на [] )



22 queries 0.212 seconds.