Чи слід використовувати <! [CDATA […]]> у HTML5?


80

Я майже впевнений, що <![CDATA[...]]>розділи можна використовувати в XHTML5, а як щодо HTML5?

Відповіді:


56

CDATAСтруктура не для HTML взагалі, це для XML.

Люди іноді використовують їх у HTML всередині scriptтегів, оскільки це позбавляє їх від необхідності уникати певних спеціальних символів. Однак це аж ніяк не є вимогою (для HTML 4 або 5).

Редагувати: Тут ми відкриваємо справді запліснявілу стару консерву від хробаків 2002 року щодо того, надсилаєте ви XHTML як text/htmlчи так, application/xhtml+xmlяк вам належить :-)


1
Я надсилаю HTML (а не XHTML), і я цього хочу. Thxs за відповідь :)
Дарріл Хайн,

Можна використовувати CDATAвсередині preтегу, щоб мені не довелося фіксувати всі мої кутові дужки?
gman

1
Неточний. CDATA призначений як для SGML, так і для підмножини XML. Тож це стосується як HTML, так і XHTML.
Йохан Буле

24

З тієї ж сторінки @pst, на яку посилається :

Синтаксичний розбір scriptта styleтеги для елементів , Керівництво щодо сумісності XHTML-HTML : "Наступний код із екрануванням може забезпечити роботу елементів сценарію та стилю як у XHTML, так і в HTML, включаючи старі браузери."

Максимальна зворотна сумісність:

<script type="text/javascript"><!--//--><![CDATA[//><!--
    ...
//--><!]]></script>

Простіша версія, начебто несумісна з "набагато старішими браузерами":

<script>//<![CDATA[
   ...
//]]></script>

Отже, CDATAможе використовуватися в HTML5, і це рекомендується в Керівництві щодо сумісності XHTML-HTML . Це корисно для поліглот- сторінок HTML / XML / XHTML , які створюються та аналізуються як XML під час розробки, але служать HTML5 для кращої сумісності між браузерами. Сторінки Polyglot мають свої переваги , і я сам цим користувався, оскільки набагато простіше налагоджувати XML / XHTML5. Наприклад, Google Chrome видасть помилку щодо недійсного XML / XHTML5 (включаючи, наприклад, екранування символів ), тоді як та сама сторінка, що служить як HTML5, "просто спрацює", вона ж "імовірно працює".


12
коментарі в тегу сценарію потрібні, якщо ви хочете підтримати 20-річні браузери, тобто NSCA Mosaic або Netscape 1 ...
Antti Haapala

15

Специфікація, здається, прояснює це питання. теги сценарію та стилю вважаються "елементами необробленого тексту". CDATA для них не потрібен або дозволений. CDATA використовується лише з "іноземним вмістом" - тобто MathML та SVG. Зверніть увагу, що в тегу сценарію є деякі обмеження - в основному ви не можете помістити щось подібне, var x = '</script>'тому що він закриє тег і його потрібно розділити, як pst, зазначено у його відповіді. http://www.w3.org/TR/html5/syntax.html#cdata-rcdata-restrictions


5

Можливо, див .: http://wiki.whatwg.org/wiki/HTML_vs._XHTML

<! [CDATA [...]]> - неправдивий коментар.

У HTML <script>вже захищений - ось чому іноді його потрібно писати як a = "<" + "/script>", щоб не заплутати браузер. Зверніть увагу, що код дійсний за межами CDATA в HTML.


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

@marcus Ви маєте рацію, і </це єдиний спеціальний маркер у цьому контексті. Мої нові відповіді з цього питання збігаються, оскільки мої знання оновлювались з часом ;-) Я оновлю це. З огляду на це, здається загальним мати розкол </scr+ ipt>, і я не знаю основного браузера, де він не працює ...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.