在JavaScript代码和HTML中使用CDATA有什么用途?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
答案 0 :(得分:118)
解析器将解析XML文档中的所有文本。
但解析器将忽略CDATA部分内的文本。
CDATA - (未分析)字符数据
术语CDATA用于不应由XML解析器解析的文本数据。
像“&lt;”这样的字符和“&amp;”在XML元素中是非法的。
“&LT;”将生成错误,因为解析器将其解释为新元素的开头。
“&安培;”将生成错误,因为解析器将其解释为字符实体的开头。
有些文字,比如JavaScript代码,包含很多“&lt;”或“&amp;”字符。为避免错误,脚本代码可以定义为CDATA。
解析器会忽略CDATA部分内的所有内容。
CDATA部分以“
<![CDATA[
”开头,以“]]>
”结尾
在节目输出中使用CDATA
如果Web浏览器将文档呈现为HTML,则XHTML文档中的CDATA部分可能会被Web浏览器进行不同的解析,因为HTML解析器不识别CDATA开始和结束标记,也不识别HTML实体引用,例如{{1在<
标记内。这可能会导致Web浏览器出现渲染问题,并且如果用于显示来自不受信任来源的数据,则可能导致跨站点脚本漏洞,因为这两种解析器在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 html>
vs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
script
语法但这违反了互联网的黄金法则:
不信任第三方,或者您的产品会破坏
答案 4 :(得分:6)
CDATA 已过时。
请注意,不应在HTML中使用CDATA部分;它们只能用XML工作。
所以不要在HTML 5中使用它。
https://developer.mozilla.org/en-US/docs/Web/API/CDATASection#Specifications
答案 5 :(得分:4)
CDATA是文档字符集中的一系列字符,可能包含字符实体。用户代理应解释属性值,如下所示: 用字符替换字符实体
忽略换行,
用一个空格替换每个回车或标签。