Что такое CDATA в HTML? [дубликат]

этот вопрос уже есть ответ здесь:

каково использование CDATA внутри тегов JavaScript и HTML?

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

// ]]>
</script> 

6 ответов


весь текст в XML-документе будет проанализирован анализатором.

но текст внутри раздела CDATA, будет проигнорировано парсером.

CDATA - (Unparsed) символьные данные

термин CDATA используется для текстовых данных, которые не должны анализироваться синтаксическим анализатором XML.

символы, такие как "

"

"& " создаст ошибку, потому что анализатор интерпретирует ее как начало символьной сущности.

Некоторый текст, например код JavaScript, содержит много символов "

все внутри раздела CDATA игнорируется синтаксическим анализатором.

раздел CDATA начинается с "<![CDATA[" и заканчивается "]]>"

использование CDATA в выводе программы

разделы CDATA в документах XHTML могут быть проанализированы по-разному веб-браузерами, если они отображают документ как HTML, поскольку синтаксические анализаторы HTML не распознают начальные и конечные маркеры CDATA, а также не распознают ссылки на объекты HTML, такие как &lt; внутри <script> теги. Это может вызвать проблемы с отрисовкой в веб-браузерах и привести к уязвимостям межсайтовых сценариев, если используется для отображения данных из ненадежных источников, так как два вида парсеров будут расходиться в том, где заканчивается раздел CDATA.

краткий учебник SGML.

см. также Википедия запись на CDATA.


CDATA не имеет никакого значения в HTML.

CDATA - это XML-конструкция, которая задает содержимое тега, которое обычно является # PCDATA - проанализированными символьными данными, вместо этого берется как #CDATA, то есть не проанализированные символьные данные. Он релевантен и действителен только в XHTML.

он используется в script теги, чтобы избежать парсинга < и &. В HTML это не нужно, потому что в HTML,script уже #CDATA.


от http://en.wikipedia.org/wiki/CDATA:

поскольку полезно иметь возможность использовать знаки меньше (

<script type="text/javascript">
//<![CDATA[
document.write("<");
//]]>
</script>

CDATA-это устаревший.

поэтому не используйте его в HTML 5.

https://developer.mozilla.org/en-US/docs/Web/API/CDATASection


способ написать общее подмножество HTML и XHTML, в надежде на улучшение переносимости.

в HTML <script> магия ускользает от всего, пока </script> появляется.

вы можете написать так:

<script>x = '<br/>';

и <br/> не является тегом.

вот почему строки, такие как:

x = '</scripts>'

должен быть спасен, как:

x = '</scri' + 'pts>'

посмотреть: зачем разбивать тег

но XML (и, следовательно, XHTML, который является" подмножеством " XML,в отличие от HTML), не имеет этой магии:<br/> будет воспринят как тэг.

<![CDATA[ это способ XHTML сказать:

не разбирайте теги до следующего ]]>, считайте все это строкой

на // добавляется, чтобы сделать CDATA хорошо работать в HTML, а также.

в HTML <![CDATA[ - это не магия, так он будет работать на JavaScript. Так что // используется для комментариев.

XHTML также видит //, но будет наблюдать его как пустую строку комментария, которая не является проблемой:

//

что сказал:

  • совместимые браузеры должны распознавать, является ли документ HTML или XHTML из начального doctype <!DOCTYPE html> vs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  • совместимые веб-сайты могут полагаться на совместимые браузеры и координировать doctype с одним допустимым script синтаксис

но это нарушает золотое правило интернета:

не доверяйте третьим лицам, или ваш продукт сломается


CDATA представляет собой последовательность символов из набора символов документа и может включать в себя сущности символов. Агенты пользователей должны интерпретировать значения атрибутов следующим образом: Замените сущности символов символами,

игнорировать переводы строк,

замените каждый возврат каретки или вкладку одним пробелом.