什么是HTML中的CDATA?

JavaScript标签和HTML中的CDATA有什么用处?

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

parsing器将parsingXML文档中的所有文本。

但是CDATA节中的文本将被parsing器忽略。

CDATA – (未parsing)字符数据

术语CDATA用于不应被XMLparsing器parsing的文本数据。

像“<”和“&”这样的字符在XML元素中是非法的。

“<”将产生一个错误,因为parsing器将其解释为一个新元素的开始。

“&”会产生错误,因为parsing器将其解释为字符实体的开始。

一些文本,如JavaScript代码,包含大量的“<”或“&”字符。 为了避免错误,可以将脚本代码定义为CDATA。

parsing器忽略了CDATA节中的所有内容。

CDATA部分以“ <![CDATA[ ”结尾并以“ ]]> ”结尾

在程序输出中使用CDATA

由于HTMLparsing器不能识别CDATA开始和结束标记,也不能识别HTML实体引用,所以XHTML文档中的CDATA部分如果将文档呈现为HTML,则易于由web浏览器进行不同的parsing&lt;<script>标签内。 这可能会导致Web浏览器中出现渲染问题,如果用来显示来自不受信任源的数据,则会导致跨站点脚本漏洞,因为这两种parsing器将不同意CDATA部分的结束位置。

一个简短的SGML教程 。

另请参阅CDATA上的Wikipedia条目 。

CDATA在HTML中完全没有意义。

CDATA是一个XML结构,它将标记的内容设置为通常是#PCDATA分析的字符数据,取而代之的是#CDATA,即非分析字符数据。 它只在XHTML中有关和有效。

它用在script标记中以避免parsing<& 。 在HTML中,这是不需要的,因为在HTML中, script已经是#CDATA。

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

由于能够在网页脚本中使用less于符号(<)和&符号(&),并且在较小程度上使用样式,而不必记住转义它们是有用的,所以通常使用CDATA标记内联文本和XHTML文档中的元素。 但是,为了使文档也可以被HTML分析器分析,这些分析器不能识别CDATA标记,所以CDATA标记通常被注释掉,就像在这个JavaScript例子中一样:

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

CDATA已弃用

所以不要在HTML 5中使用它。

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

CDATA是文档字符集中的一系列字符,可能包含字符实体。 用户代理应该如下解释属性值:用字符replace字符实体,

忽略换行,

用一个空格replace每个回车符或制表符。

一种编写HTML和XHTML的通用子集的方法 ,希望有更好的可移植性。

在HTML中, <script>是魔法转义,直到</script>出现。

所以你可以写:

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

<br/>不会被视为标签。

这就是为什么string如:

 x = '</scripts>' 

必须像下面这样逃脱:

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

请参阅: 为什么在使用document.write()写入时为其分割<script>标记?

但是XML(因此XHTML是XML的一个“子集”, 与HTML不同 )没有这种魔力: <br/>将被看作是一个标签。

<![CDATA[是XHTML方式说:

不要parsing任何标签,直到下一个]]> ,认为这是一个string

//被添加来使CDATA在HTML中也能正常工作。

在HTML <![CDATA[不是魔术,所以它将由JavaScript运行。 所以/ /用于注释掉。

XHTML也看到// ,但会将其视为一个空的注释行,这不是一个问题:

 // 

那就是说:

  • 如果文档是从最初的doctype <!DOCTYPE html> vs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  • 符合标准的网站可以依赖于兼容的浏览器,并使用一个有效的script语法来协调doctype

但这违反了互联网的金科玉律:

不要相信第三方,否则你的产品就会崩溃