CDATA 在 JavaScript 标签和 HTML 中有什么用途?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
CDATA 在 JavaScript 标签和 HTML 中有什么用途?
<script type="text/javascript">
// <![CDATA[
// ]]>
</script>
一个XML文档中的所有文本都将被解析器解析。
但是CDATA部分中的文本将被解析器忽略。
CDATA - (未解析)字符数据
术语“CDATA”用于指不应由XML解析器解析的文本数据。
像“<”和“&”这样的字符在XML元素中是非法的。
“<”会生成错误,因为解析器将其解释为新元素的开始。
“&”会生成错误,因为解析器将其解释为字符实体的开始。
一些文本,比如JavaScript代码,包含很多“<”或“&”字符。为避免错误,脚本代码可以定义为CDATA。
CData部分内的所有内容都将被解析器忽略。
CData部分以“
<![CDATA[
”开头,以“]]>
”结束。
程序输出中使用CDATA
XHTML文档中的CDATA部分可能会被Web浏览器以不同的方式解析,如果它们将文档呈现为HTML,则HTML解析器不会识别CDATA的起始和结束标记,也不会识别在
< script>
标记内的HTML实体引用,这可能会导致Web浏览器中的渲染问题,并且如果用于显示来自不受信任来源的数据,则可能导致跨站点脚本攻击,因为两种解析器将无法达成关于CDATA部分结束位置的共识。
此外,请参阅维基百科上的CDATA条目。
CDATA
在HTML中没有任何意义。
CDATA
是一个XML结构,它将标签的内容(通常为#PCDATA - 解析字符数据)设置为#CDATA,即非解析字符数据。它仅在XHTML中相关和有效。
它用于script
标签中,以避免解析<
和&
。在HTML中,这是不必要的,因为在HTML中,script
已经是#CDATA。
CDATA
解释。 - freginoldCDATA已经过时了。
请注意,不应在HTML中使用CDATA段落;它们只适用于XML。
因此,在HTML 5中不要使用它。
https://developer.mozilla.org/en-US/docs/Web/API/CDATASection#Specifications
和
&`都放置在其他标记中?旧文档如何支持?浏览器会突然放弃CDATA支持吗?因此,我们无法处理由其他人创建的文档,我们无法控制吗?还是只能手动操作字符串? - user2895783来自http://en.wikipedia.org/wiki/CDATA:
在Web页面脚本中使用小于号(<)和&符号(&)很有用,以及较少的情况下样式,为了避免记住对它们进行转义,通常在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 = '</scri' + 'pts>'
参见:为什么使用document.write()时需要拆分<script>标签?
但是XML(因此也包括XHTML,它是XML的"子集",不像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
语法来协调文档类型但这违反了互联网的黄金法则:
不要相信第三方,否则您的产品将会崩溃
CDATA是文档字符集中的一系列字符,可以包括字符实体。用户代理应按以下方式解释属性值:
使用字符替换字符实体,
忽略换行符,
将每个回车或制表符替换为一个空格。