什么是HTML中的CDATA? [重复]

问题描述 投票:161回答:6

这个问题在这里已有答案:

在JavaScript标记和HTML中使用CDATA有什么用?

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

// ]]>
</script> 
javascript html xhtml cdata
6个回答
119
投票

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

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

CDATA - (未分析)字符数据

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

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

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

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

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

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

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

在程序输出中使用CDATA

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

<script>

另外,请参阅A brief SGML tutorial


83
投票

Wikipedia entry on CDATA在HTML中根本没有任何意义。

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

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


16
投票

来自script

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

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

7
投票

一种编写HTML和XHTML的公共子集的方法,希望具有更高的可移植性。

在HTML中,<script type="text/javascript"> //<![CDATA[ document.write("<"); //]]> </script> 是魔法逃脱一切,直到<script>出现。

所以你可以写:

</script>

<script>x = '<br/>'; 不会被视为标签。

这就是为什么字符串如:

<br/>

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

x = '</scripts>'

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

但是XML(以及XHTML,它是XML的“子集”,Why split the <script> tag when writing it with document.write()?),没有那种魔力:unlike HTML将被视为标签。

<br/>是XHTML的说法:

不要解析任何标签,直到下一个<![CDATA[,认为它都是一个字符串

添加了]]>以使CDATA在HTML中运行良好。

在HTML中,//不是神奇的,所以它将由JavaScript运行。所以<![CDATA[用来评论它。

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

//

那说:

  • 兼容的浏览器应该识别文档是HTML还是XHTML来自最初的doctype // vs <!DOCTYPE html>
  • 兼容的网站可以依赖兼容的浏览器,并使用单一有效的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">语法协调doctype

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

不信任第三方,否则您的产品将会破产


7
投票

CDATA已过时。

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

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

script

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


4
投票

CDATA是文档字符集中的字符序列,可以包括字符实体。用户代理应按如下方式解释属性值:用字符替换字符实体,

忽略换行,

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

© www.soinside.com 2019 - 2024. All rights reserved.