Чи змінює HTML5 стандарт для коментування HTML?


131

Нещодавно я виявив, що, можливо, є новий спосіб коментування в HTML5.

Замість типового <!-- -->багаторядкового коментування, про який я читав, я подумав, що помітив, що мій IDE регулярно <!div >коментував. Тож я перевірив це, і на моє здивування Chrome прокоментував цей тег. Він лише прокоментував тег, а не вміст діва, тому мені довелося прокоментувати ближче, <!/div>щоб уникнути закриття інших дівок.

Я перевірив інший, і, здається, що, як правило, проставляючи знак оклику перед відкриттям будь-якого тегу, цей символ <, робить цей тег коментованим.

Це насправді нове? Це погана практика? Це насправді дуже зручно, але чи це практично (якщо не нове)?

Редагування додаткових подробиць: Хоча помилка синтаксису або неправильне тлумачення саме цього синтаксису є вагомою причиною, як же насправді Chrome робить їх повноцінними коментарями?

Код записується як :

<!div displayed> some text here that is still displayed <!/div>

А потім він надається як :

<!--div displayed--> some text here that is still displayed <!--/div-->

19
Швидше за все, це просто синтаксична помилка та / або нісенітниця, і тому їх ігнорують.
деге

@deceze Я дещо очікував, що оскільки браузери можуть бути поблажливішими щодо того, як вони надають HTML згідно менш жорстких правил.
Андрій

1
@ Lemony-Andrew Що IDE робить це? Відповідно до обраної відповіді, ми можемо повідомити про це як про проблему (або виправити її, якщо є відкритий код).
Дерексон

1
@Derecksonit Я двічі перевірив свій IDE після офіційної відповіді, щоб переконатися, що мої очі не обманювали мене. Сталося так, що він фактично не коментувався, а був звичайним кольором тексту, який був подібним. Це все було випадково.
Андрій

Відповіді:


196

Немає нового стандарту для коментарів у HTML5. Єдиний вірний синтаксис коментарів досі <!-- -->. З розділу 8.1.6 W3C HTML5 :

Коментар повинен починатися з чотирьох символьних послідовностей U + 003C МЕНШЕ-ЗНАЧЕННЯ, U + 0021 ЕКСКЛАМАЦІЙНА ОЗНАКА, U + 002D ГІФ-МІНУС, U + 002D ГІФ-МІНУС ( <!--).

The <! синтаксичних бере початок в SGML DTD розмітки, яка не є частиною HTML5. У HTML5 вона зарезервована для коментарів, розділів CDATA та декларації DOCTYPE. Отже, чи є ця альтернатива поганою практикою, залежить від того, чи вважаєте ви використання (або ще гірше, залежність від) застарілої розмітки поганою практикою.

Validator.nu називає те, що у вас є "коментар богуса". - це означає, що до нього звертаються як до коментаря, хоча це не є дійсним коментарем. Це, мабуть, для зворотної сумісності з pre-HTML5, заснованим на SGML, і декларації розмітки, які приймають форму <!FOO>, тому я не називатиму це новим. Причина, до якої вони ставляться як коментарі, полягає в тому, що декларації розмітки SGML були спеціальними деклараціями, які не мали бути надані, але оскільки вони безглузді в HTML5 (за винятком вище), що стосується HTML5 DOM, вони є не що інше, як коментарі .

Наступні кроки в розділі 8.2.4 призводять до цього висновку, який, як видається, дотримується до листа:

  1. 8.2.4.1 Стан даних :

    Скористайтеся наступним символом введення:

    "<" (U + 003C)
    Перехід до стану відкритого тегу.

  2. 8.2.4.8 Тег відкритого стану :

    Скористайтеся наступним символом введення:

    "!" (U + 0021)
    Перехід у відкритий стан декларації розмітки.

  3. 8.2.4.45 Відкритий стан декларації розмітки :

    Якщо наступні два символи є символами "-" (U + 002D), споживайте ці два символи, створіть маркер коментаря, дані якого є порожнім рядком, і перейдіть до стану запуску коментаря.

    В іншому випадку, якщо наступні сім символів невідчутливі до регістру ASCII для слова "DOCTYPE", тоді споживайте ці символи та перейдіть у стан DOCTYPE.

    В іншому випадку, якщо є відрегульований поточний вузол, і він не є елементом у просторі імен HTML, а наступні сім символів - це регістр відповідності регістру рядка "[CDATA [" (п'ять великих літер "CDATA" з U + 005B Символ лівого квадрату до і після), потім споживайте ці символи та перейдіть у стан розділу CDATA.

    В іншому випадку це помилка розбору. Перехід до стану фальшивих коментарів. Наступний символ, який вживається, якщо він є, - це перший символ, який буде в коментарі.

    Зверніть увагу, що він говорить про перехід до стану запуску коментарів, лише якщо послідовність зустрічаються символів є <!--, інакше це хибний коментар. Це відображає те, що зазначено у розділі 8.1.6 вище.

  4. 8.2.4.44 Повідомлення про богус :

    Використовуйте кожен символ до першого і включаючи першого символу ">" (U + 003E) або в кінці файлу (EOF), залежно від того, що відбувається раніше. Випустіть маркер коментаря, дані якого є з'єднанням усіх символів, починаючи з включно з символом, який змусив стан машину перейти у стан неправдивого коментаря, аж до включення символу безпосередньо перед останнім спожитим символом (тобто до символу безпосередньо перед символом U + 003E або EOF), але з будь-якими символами U + 0000 NULL, заміненими символами U + FFFD REPLACEMENT CHARACTER. (Якщо коментар був запущений до кінця файлу (EOF), маркер порожній. Точно так же маркер порожній, якщо він був створений рядком " <!>".)

    У звичайній англійській мові це перетворюється <!div displayed>на <!--div displayed-->та <!/div>в <!--/div-->точно так, як описано в питанні.

Нарешті, ви, напевно, можете очікувати, що інші парсери, сумісні з HTML5, поводяться так само, як і Chrome.


11
Дякуємо, що знайшли час, щоб знайти офіційні міркування цього інциденту. Це досить чітко очищає речі і надає чимало обґрунтованості моєму помилковому припущенню.
Андрій

2
Дивно, як специфікація HTML5 має правила для обробки "недійсного" вмісту. Якщо він недійсний, його взагалі не слід обробляти.
Артуро Торрес Санчес

2
Ну, ось якими раніше були HTML та веб-мови - суворі. Причина неправильної структури коду обробляється настільки м'яко, що стосується кращої якості сайтів. Чим більше веб-сайтів може переглядати веб-переглядач і правильно переглядати його з неправильним синтаксисом, тим щасливішими будуть їх кінцеві користувачі. Загальні автори веб-стандартів (здебільшого w3 не інші) зрозуміли, що через це постачальники браузерів не дотримуються вказівок. HTML5 з'явився і базувався лише на ідеї зробити дизайн офіційно більш м'яким.
Андрій

3
@ ArturoTorresSánchez: XHTML спробував підхід "недійсний вміст = помилка" і невдало провалився. Крім того, правила в основному говорять: "не розбирайте цей хибний коментар, просто розглядайте його як коментар і аналізуйте наступну дійсну річ, яку ви знайдете". Отже, залежно від вашої точки зору, HTML5 або не робить те, що ви хочете, тому що те, що ви хочете, смокче, або HTML5 робить саме те, що ви хочете.
slebetman

1
@ ArturoTorresSánchez: Історично, HTML-сервери очікували б обслуговувати однакову послідовність символів для будь-якого браузера; хоча можна створити формат документа таким чином, щоб старші парсери змогли розрізнити документи, які використовують "необов'язкові" новіші функції, які старші парсери повинні ігнорувати, документи, які використовують життєво важливіші нові функції, і повинні бути відхилені браузерами, які не мають " t їх підтримка, а також документи, які є просто недійсними, такого не робилося з HTML під час його формування.
supercat

12

Я не думаю, що це сприятливо сприймати, оскільки <!виступає за декларації про розмітку <!DOCTYPE. Таким чином, ви думаєте, що це коментується (ну ... браузер спробує його інтерпретувати).

Навіть якщо він не відображається, це, здається, не є правильним синтаксисом коментування HTML-коду.


Хоча це може бути правдою, як же Chrome насправді робить ці теги коментованими, але тепер доктіп.
Андрій

4
Пропозиція (я не впевнений, просто здогадуюсь): намагається інтерпретувати> не може> прокоментував?
Ів Ланге

Це здається мені досить розумним.
Андрій

Знову (вибачте, що наполягаєте), але пам’ятайте, що це лише припущення!
Ів Ланге
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.