什么是HTML中的CDATA?

Sex*_*yMF 165 html javascript xhtml cdata

在JavaScript标记和HTML中使用CDATA有什么用?

<script type="text/javascript"> 
// <![CDATA[

// ]]>
</script> 
Run Code Online (Sandbox Code Playgroud)

Ahs*_*hod 119

解析器将解析XML文档中的所有文本.

但解析器将忽略CDATA部分内的文本.

CDATA - (未分析)字符数据

术语CDATA用于不应由XML解析器解析的文本数据.

像"<"和"&"这样的字符在XML元素中是非法的.

"<"将生成错误,因为解析器将其解释为新元素的开头.

"&"将生成错误,因为解析器将其解释为字符实体的开头.

某些文本(如JavaScript代码)包含大量"<"或"&"字符.为避免错误,脚本代码可以定义为CDATA.

解析器会忽略CDATA部分内的所有内容.

一个CDATA部件以"开始<![CDATA[",结尾是" ]]>"

在程序输出中使用CDATA

如果Web浏览器将文档呈现为HTML,则XHTML文档中的CDATA部分可能会被W​​eb浏览器进行不同的解析,因为HTML解析器不识别CDATA开始和结束标记,也不识别HTML实体引用(如标记&lt;内)<script>.这可能会导致Web浏览器出现渲染问题,并且如果用于显示来自不受信任来源的数据,则可能导致跨站点脚本漏洞,因为这两种解析器在CDATA部分结束的位置上会有不同意见.

简短的SGML教程.

另外,请参阅CDATA上维基百科条目.

  • 我想我当时有一个更好的问题.粗略地说,使用CDATA标签有什么好处? (7认同)

Del*_*ani 89

CDATA HTML中没有任何意义.

CDATA是一种XML构造,它设置标记的内容,通常是#PCDATA - 解析的字符数据,而不是#CDATA,即非解析的字符数据.它只在XHTML中相关且有效.

它用在script标签中以避免解析<&.在HTML中,这不是必需的,因为在HTML中,script已经是#CDATA.

  • 那么,人们是否在Javascript标签中使用它?哪里有任何意义,为什么,谢谢 (11认同)

use*_*959 17

来自http://en.wikipedia.org/wiki/CDATA:

因为能够在网页脚本中使用少于符号(<)和&符号(&)以及在较小程度上使用样式而不必记住转义它们是很有用的,所以通常使用CDATA标记. XHTML文档中内联和元素的文本.但是,为了使文档也可以由不识别CDATA标记的HTML解析器进行解析,CDATA标记通常会被注释掉,就像在这个JavaScript示例中一样:

<script type="text/javascript">
//<![CDATA[
document.write("<");
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)


Dan*_*eón 10

CDATA已过时.

请注意,不应在HTML中使用CDATA部分; 它们只能用于XML.

所以不要在HTML 5中使用它.

https://developer.mozilla.org/en-US/docs/Web/API/CDATASection#Specifications

MDN截图

  • CDATA本身并未弃用.XHTML基于XML,因此它必须支持CDATA.(在HTML中,CDATA标记没有任何意义;它只会被解析为虚假注释.)不推荐使用CDATASection接口; 如果页面被解析为XHTML,其内容将作为普通文本节点出现在DOM中. (4认同)
  • 我对变化的内容感到困惑.1)DOM4中仍然存在字符数据?https://www.w3.org/TR/dom/#interface-characterdata 2)然而CDATASection正被删除?https://www.w3.org/TR/dom/#dom-core什么是替代方案?强制编码或所有`<`和`&`并放在其他标签中?如何支持旧文件?浏览器是否会突然放弃CDATA支持?那么我们无法处理我们无法控制的其他人创建的文档?或者只是采用手动字符串摆弄? (2认同)

Cir*_*四事件 7

一种编写HTML和XHTML的公共子集的方法,希望具有更高的可移植性.

在HTML中,<script>魔法逃脱一切直到</script>出现.

所以你可以写:

<script>x = '<br/>';
Run Code Online (Sandbox Code Playgroud)

并且<br/>不会被视为标签.

这就是为什么字符串如:

x = '</scripts>'
Run Code Online (Sandbox Code Playgroud)

必须像以下一样进行转义:

x = '</scri' + 'pts>'
Run Code Online (Sandbox Code Playgroud)

请参阅:为什么在使用document.write()编写<script>标记时将其拆分?

但是XML(以及XHTML,它是XML的"子集",与HTML不同),没有那种魔力:<br/>会被视为标签.

<![CDATA[ 是XHTML的说法:

不要解析任何标签,直到下一个]]>,认为它都是一个字符串

//添加它是为了使CDATA在HTML中也能很好地工作.

在HTML <![CDATA[中并不神奇,因此它将由JavaScript运行.因此//用于评论它.

XHTML也会看到//,但会将其视为空注释行,这不是问题:

//
Run Code Online (Sandbox Code Playgroud)

那说:

  • 兼容的浏览器应该识别文档是来自初始doctype <!DOCTYPE html>vs的HTML还是XHTML<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  • 兼容的网站可以依赖兼容的浏览器,并使用单一有效script语法协调doctype

但这违反了互联网的黄金法则:

不信任第三方,否则您的产品将会破产


Tus*_*rao 5

CDATA 是来自文档字符集的字符序列,可能包括字符实体。用户代理应按如下方式解释属性值:用字符替换字符实体,

忽略换行符,

用一个空格替换每个回车符或制表符。