JavaScript标签和HTML中的CDATA有什么用处?什么是HTML中的CDATA?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
JavaScript标签和HTML中的CDATA有什么用处?什么是HTML中的CDATA?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
解析器将解析XML文档中的所有文本。
但是,CDATA部分内的文本将被解析器忽略。
CDATA - (非解析)字符数据
术语CDATA使用约不应由XML解析器解析的文本数据。
像“<”和“&”这样的字符在XML元素中是非法的。
“<”将产生错误,因为解析器将其解释为新元素的开始。
“&”将产生错误,因为解析器将其解释为字符实体的开始。
某些文本(如JavaScript代码)包含大量“<”或“&”字符。为了避免错误,脚本代码可以定义为CDATA。
解析器忽略CDATA部分内的所有内容。
CDATA项与 “
<![CDATA[
” 开始,以 “]]>
”
程序输出使用CDATA的XHTML文档
CDATA部分容易被不同的解析结束因为HTML解析器不能识别CDATA开始和结束标记,也不能识别HTML实体引用,例如
<script>
标记中的<
。这可能会导致Web浏览器出现渲染问题,并且如果用于显示来自不受信任源的数据,则可能会导致跨站点脚本漏洞,因为两种解析器将不同意CDATA部分结束的位置。
CDATA
在HTML中完全没有意义。
CDATA
是一个XML构造,它将标记的内容设置为通常是#PCDATA分析的字符数据,而不是将其视为#CDATA,即非分析字符数据。它仅在XHTML中相关且有效。
它用于script
标签以避免解析<
和&
。在HTML中,这不是必需的,因为在HTML中,script
已经是#CDATA。
CDATA是来自文档字符集的一系列字符,可能包含字符实体。用户代理应该如下解释的属性值: ,字符替换字符实体,
忽略换行符,
替换为单个空格每个回车或标签。
从http://en.wikipedia.org/wiki/CDATA:
既然是能够使用低于迹象(<)和 符号(&)在网页脚本中非常有用,并在较小程度上的风格, 无需要记住要逃避它们,通常在内联文本和 XHTML文档中使用CDATA 标记。但是,这样的文件也可以通过HTML解析 分析器,它不承认CDATA标记,在CDATA标记 通常被注释掉,因为在这个JavaScript示例:
<script type="text/javascript">
//<![CDATA[
document.write("<");
//]]>
</script>
使用它的方式来编写HTML和XHTML的公共子集,更便携的希望。
在HTML中,<script>
是魔法逃脱一切,直到出现</script>
。
所以你可以这样写:
<script>x = '<br/>';
和<br/>
不会被视为一个标签。
这就是为什么字符串,例如:
x = '</scripts>'
必须进行转义,如:
x = '</scr' + '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>
与<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
script
语法但违反了互联网的黄金法则:
不信任的第三方,或你的产品将打破
因此,Y不人使用它Javascript中标签?在哪里有什么意义,谢谢 – SexyMF 2011-08-17 11:45:44
@SexyMF可能是因为这些人输入了XHTML文档而不是SGML/HTML,并且/或者他们希望帮助符合标准的浏览器更少地正确加载他们的页面。 – amn 2017-04-25 13:39:33
尽管已经快6岁了,但这仍然是我见过的CDATA的最佳解释。 – freginold 2017-05-11 17:55:38