Что такое CDATA в HTML?

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

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

// ]]>
</script> 

Ответ 1

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

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

Данные о символах CDATA - (Unparsed)

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

Такие символы, как "<" и "&" являются незаконными в элементах XML.

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

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

Некоторые тексты, такие как код JavaScript, содержат много "<" или "&" персонажи. Чтобы избежать ошибок script, код может быть определен как CDATA.

Все внутри секции CDATA игнорируется парсером.

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

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

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

Краткое руководство по SGML.

Также см. запись Wikipedia на CDATA.

Ответ 2

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

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

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

Ответ 3

Из http://en.wikipedia.org/wiki/CDATA:

Так как полезно иметь возможность использовать меньше знаков (<) и амперсанды (&) в сценариях веб-страниц и в меньшей степени стили, без необходимости помнить, чтобы избежать их, обычно используется CDATA маркеры вокруг текста строки и элементов в Документы XHTML. Но так, что документ также может быть проанализирован с помощью HTML синтаксические анализаторы, которые не распознают маркеры CDATA, маркеры CDATA обычно закомментированы, как в этом примере JavaScript:

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

Ответ 5

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

Игнорировать строки,

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

Ответ 6

Способ записи общего подмножества HTML и XHTML в надежде на большую переносимость.

В HTML, <script> - это магия, которая вытесняет все, пока не появится </script>.

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

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

и <br/> не будут считаться тегом.

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

x = '</scripts>'

должен быть экранирован как:

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

Смотрите: Зачем расколоть <script> тег при записи его с помощью document.write()?

Но 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

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

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