在 JavaScript 标签和 HTML 中使用 CDATA 有什么用?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
在 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 部分可能会被 Web 浏览器以不同方式解析,因为 HTML 解析器不识别 CDATA 开始和结束标记,也不识别 HTML 实体引用,例如标签
<
内<script>
。如果用于显示来自不受信任来源的数据,这可能会导致 Web 浏览器中的呈现问题,并可能导致跨站点脚本漏洞,因为这两种解析器将在 CDATA 部分结束的位置上存在分歧。
CDATA
在 HTML 中根本没有任何意义。
CDATA
是一个 XML 构造,它设置通常是 #PCDATA - 解析的字符数据的标签内容,取而代之的是 #CDATA,即未解析的字符数据。它仅在 XHTML 中相关且有效。
它用于script
标签以避免解析<
和&
。在 HTML 中,这是不需要的,因为在 HTML 中,script
它已经是 #CDATA。
来自http://en.wikipedia.org/wiki/CDATA:
由于能够在网页脚本中使用小于号 (<) 和与号 (&) 以及在较小程度上使用样式很有用,而不必记住对它们进行转义,因此通常在周围使用 CDATA 标记XHTML 文档中内联和元素的文本。但是为了使文档也可以被 HTML 解析器解析,它不识别 CDATA 标记,CDATA 标记通常被注释掉,如下面的 JavaScript 示例所示:
<script type="text/javascript">
//<![CDATA[
document.write("<");
//]]>
</script>
CDATA 已过时。
请注意,不应在 HTML 中使用 CDATA 部分;它们只适用于 XML。
所以不要在 HTML 5 中使用它。
https://developer.mozilla.org/en-US/docs/Web/API/CDATASection#Specifications
一种编写 HTML 和 XHTML 公共子集的方法
希望有更大的便携性。
在 HTML 中,<script>
魔术会逃避一切直到</script>
出现。
所以你可以写:
<script>x = '<br/>';
并且<br/>
不会被视为标签。
这就是为什么字符串如:
x = '</scripts>'
必须像这样逃脱:
x = '</scri' + 'pts>'
请参阅:使用 document.write() 编写时为什么要拆分 <script> 标签?
但是 XML(因此 XHTML 是 XML 的“子集”,与 HTML 不同)没有这种魔力:<br/>
会被视为标签。
<![CDATA[
是 XHTML 的说法:
在下一个之前不要解析任何标签
]]>
,将其视为一个字符串
将//
被添加到使CDATA工作以及在HTML中也是如此。
在 HTML<![CDATA[
中不是魔法,所以它会由 JavaScript 运行。So//
用于注释掉它。
XHTML 也会看到//
, 但会将其视为一个空注释行,这不是问题:
//
那说:
<!DOCTYPE html>
vs识别文档是 HTML 还是 XHTML<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
script
语法来协调文档类型但这违反了互联网的黄金法则:
不要相信第三方,否则您的产品会损坏