这个问题在这里已有答案:
在JavaScript标记和HTML中使用CDATA有什么用?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
解析器将解析XML文档中的所有文本。
但解析器将忽略CDATA部分内的文本。
CDATA - (未分析)字符数据
术语CDATA用于不应由XML解析器解析的文本数据。
像“<”和“&”这样的字符在XML元素中是非法的。
“<”将生成错误,因为解析器将其解释为新元素的开头。
“&”将生成错误,因为解析器将其解释为字符实体的开头。
某些文本(如JavaScript代码)包含大量“<”或“&”字符。为避免错误,脚本代码可以定义为CDATA。
解析器会忽略CDATA部分内的所有内容。
CDATA部分以“
<![CDATA[
”开头,以“]]>
”结尾
在程序输出中使用CDATA
如果Web浏览器将文档呈现为HTML,则XHTML文档中的CDATA部分可能会被不同地解析,因为HTML解析器不识别CDATA开始和结束标记,也不识别
<
标记内的qzxswpoi等HTML实体引用。这可能会导致Web浏览器出现渲染问题,并且如果用于显示来自不受信任来源的数据,则可能导致跨站点脚本漏洞,因为这两种解析器在CDATA部分结束的位置上会有不同意见。
<script>
。
另外,请参阅A brief SGML tutorial。
Wikipedia entry on CDATA在HTML中根本没有任何意义。
CDATA
是一个XML构造,它设置标记的内容,通常是#PCDATA - 解析的字符数据,而不是#CDATA,即非解析的字符数据。它只在XHTML中相关且有效。
它用于CDATA
标签,以避免解析script
和<
。在HTML中,这不是必需的,因为在HTML中,&
已经是#CDATA。
来自script
:
因为能够在网页脚本中使用小于号(<)和&符号(&)以及在较小程度上使用样式而不必记住转义它们是很有用的,所以通常使用CDATA标记。 XHTML文档中内联和元素的文本。但是,为了使文档也可以由不识别CDATA标记的HTML解析器进行解析,CDATA标记通常会被注释掉,就像在这个JavaScript示例中一样:
http://en.wikipedia.org/wiki/CDATA
一种编写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也会看到//
,但会将其视为空注释行,这不是问题:
//
那说:
//
vs <!DOCTYPE html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
语法协调doctype但这违反了互联网的黄金法则:
不信任第三方,否则您的产品将会破产
CDATA已过时。
请注意,不应在HTML中使用CDATA部分;它们只能用于XML。
所以不要在HTML 5中使用它。
script
https://developer.mozilla.org/en-US/docs/Web/API/CDATASection#Specifications
CDATA是文档字符集中的字符序列,可以包括字符实体。用户代理应按如下方式解释属性值:用字符替换字符实体,
忽略换行,
用一个空格替换每个回车或标签。