什么是HTML中的CDATA?

时间:2011-08-17 11:43:36

标签: javascript html xhtml cdata

在JavaScript代码和HTML中使用CDATA有什么用途?

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

// ]]>
</script> 

6 个答案:

答案 0 :(得分:118)

解析器将解析XML文档中的所有文本。

但解析器将忽略CDATA部分内的文本。

CDATA - (未分析)字符数据

  

术语CDATA用于不应由XML解析器解析的文本数据。

     

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

     

“&LT;”将生成错误,因为解析器将其解释为新元素的开头。

     

“&安培;”将生成错误,因为解析器将其解释为字符实体的开头。

     

有些文字,比如JavaScript代码,包含很多“&lt;”或“&amp;”字符。为避免错误,脚本代码可以定义为CDATA。

     

解析器会忽略CDATA部分内的所有内容。

     

CDATA部分以“<![CDATA[”开头,以“]]>”结尾

在节目输出中使用CDATA

  如果Web浏览器将文档呈现为HTML,则XHTML文档中的CDATA部分可能会被W​​eb浏览器进行不同的解析,因为HTML解析器不识别CDATA开始和结束标记,也不识别HTML实体引用,例如{{1在&lt;标记内。这可能会导致Web浏览器出现渲染问题,并且如果用于显示来自不受信任来源的数据,则可能导致跨站点脚本漏洞,因为这两种解析器在CDATA部分结束的位置上会有不同意见。

A brief SGML tutorial

另请参阅Wikipedia entry on CDATA

答案 1 :(得分:82)

CDATA在HTML中没有任何意义。

CDATA是一个XML构造,它设置标记的内容,通常是#PCDATA - 解析的字符数据,而不是#CDATA,即非解析的字符数据。它只在XHTML中相关且有效。

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

答案 2 :(得分:16)

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

  

因为能够使用小于号(&lt;)和   网页脚本中的&符号(&amp;),以及较小范围的样式,   不必记住逃避它们,通常使用CDATA   内联文本和元素中的标记   XHTML文档。但这样文档也可以通过HTML进行解析   解析器,不识别CDATA标记,CDATA标记   通常会被注释掉,就像在这个JavaScript示例中一样:

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

答案 3 :(得分:7)

编写HTML和XHTML的通用子集的方法,希望提高可移植性。

在HTML中,在<script>出现之前,</script>才能逃脱一切。

所以你可以写:

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

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

这就是为什么字符串如:

x = '</scripts>'

必须像以下一样进行转义:

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

请参阅:Why split the <script> tag when writing it with document.write()?

但是XML(以及XHTML,它是XML的“子集”,unlike HTML),没有那种魔力:<br/>会被视为标记。

<![CDATA[是XHTML的说法:

  

在下一个]]>之前不解析任何标记,将其全部视为字符串

添加//以使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">
  • 中的HTML或XHTML
  • 兼容网站可以依赖兼容的浏览器,并使用单一有效script语法
  • 协调doctype

但这违反了互联网的黄金法则:

  

不信任第三方,或者您的产品会破坏

答案 4 :(得分:6)

CDATA 已过时

请注意,不应在HTML中使用CDATA部分;它们只能用XML工作。

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

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

Screenshot from MDN

答案 5 :(得分:4)

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

忽略换行,

用一个空格替换每个回车或标签。