Следует ли мне использовать <! [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) и хочу этого. Спасибо за ответ :)
Darryl Hein

Можно использовать CDATAвнутри preтега, чтобы мне не пришлось поправлять все угловые скобки?
gman

1
Неточно. CDATA предназначен как для SGML, так и для подмножества XML. Так что это и для HTML, и для XHTML.
Johan

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 для лучшей кросс-браузерной совместимости. Страницы полиглотов имеют свои преимущества , и я сам этим пользовался, так как отладить XML / XHTML5 намного проще. Google Chrome, например, выдаст ошибку из-за недопустимого XML / XHTML5 (включая, например, экранирование символов ), тогда как та же страница, которая обслуживается как HTML5, будет «просто работать» или «вероятно, работать».


12
комментарии в теге сценария необходимы, если вы хотите поддерживать браузеры 20-летней давности, то есть NSCA Mosaic или Netscape 1 ...
Антти Хаапала,

15

Спецификация, похоже, проясняет эту проблему. теги скриптов и стилей считаются «необработанными текстовыми элементами». CDATA для них не нужен или не разрешен. CDATA используется только с «чужим контентом», то есть MathML и SVG. Обратите внимание, что есть некоторые ограничения на то, что может быть в теге script - в основном вы не можете помещать что-то подобное, 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

@marcus Вы правы, и это </единственный специальный токен в данном контексте. Мои новые ответы на эту тему совпадают, поскольку со временем мои знания обновлялись ;-) Я обновлю это. При этом кажется обычным </script>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.