我很确定<![CDATA[...]]>可以在XHTML5中使用各个部分,但是HTML5呢?
hol*_*lsk 56
该CDATA结构根本不适用于HTML,而是适用于XML.
人们有时会在HTML script标签内部使用它们,因为它不需要它们来逃避某些特殊字符.但这并不是一个要求(对于HTML 4或5).
编辑:这是我们从2002年开始发现真正发霉的旧蠕虫的地方,无论你是在发送XHTML,text/html还是application/xhtml+xml像你"应该"那样:-)
Joe*_*rra 23
从同一页面@pst链接到:
特定于元素的解析
script和style标签,XHTML-HTML兼容性指南:"以下带有转义的代码可以确保脚本和样式元素在XHTML和HTML中都能正常工作,包括旧浏览器."
最大向后兼容性:
<script type="text/javascript"><!--//--><![CDATA[//><!--
...
//--><!]]></script>
Run Code Online (Sandbox Code Playgroud)
更简单的版本,与"更旧的浏览器"不兼容:
<script>//<![CDATA[
...
//]]></script>
Run Code Online (Sandbox Code Playgroud)
因此,CDATA可以在HTML5中使用,并且在XHTML-HTML兼容性指南中建议使用它.这对于多语言 HTML/XML/XHTML页面很有用,它们在开发期间创建并解析为XML,但作为HTML5提供了更好的跨浏览器兼容性.Polyglot页面有它们的好处,我自己也使用过它,因为调试XML/XHTML5要容易得多.例如,谷歌浏览器会因无效的XML/XHTML5(包括例如字符转义)而引发错误,而用作HTML5的同一页面将"正常工作",即"可能正常工作".
rma*_*her 14
该规范似乎解决了这个问题.脚本和样式标记被认为是"原始文本元素".不需要或允许CDATA.CDATA仅用于"外国内容" - 即MathML和SVG.请注意,脚本标记中的内容有一些限制 - 基本上你不能把它var x = '</script>'放在那里,因为它会关闭标记,需要像在答案中注明的那样拆分.http://www.w3.org/TR/html5/syntax.html#cdata-rcdata-restrictions
小智 5
也许请看:http://wiki.whatwg.org/wiki/HTML_vs._XHTML
<![CDATA [...]]>是一个虚假的评论.
在HTML中,<script>已经受到保护 - 这就是为什么有时必须将其编写为a = "<" + "/script>",以避免混淆浏览器.请注意,代码在HTML中的CDATA 之外有效.
支持 HTML5 的浏览器已经将里面的内容<style>和<script>标签读取为 CDATA(字符数据)。这意味着他们可以解析 CSS 和 JavaScript,但也会忽略任何标记字符。示例:这些标签之间的HTML 注释(<!--或-->)将被忽略。
如果您希望 HTML5 页面与不将这些标签读取为 CDATA 的 XHTML 和 XML 兼容,则只需在内部<style>和<script>标签中添加 CDATA 块。XML 和 XHTML 解析器将读取<style>和<script>标记内容,就像它们读取所有 HTML 元素一样,作为 PCDATA(即普通 HTML 元素),这意味着内容被解析为标记,并可能因在这些标记之间添加的特殊字符而中断。您可以在这两个标签之间添加特殊的 CDATA 部分来支持它。因为 XML 和 XHTML 解析器将元素内的所有内容都读取为可能更多的标记,所以添加 CDATA 可以防止某些字符被解释为 XML 或其他类型的字符引用。
问题是,大多数 HTML4/HTML5 浏览器和解析器不支持在这些标签之间添加额外的 CDATA 部分,因此如果您为 XHTML/XML 支持添加 CDATA 块,则必须为这些代理注释掉 CDATA 块。
另外,请注意,在这些标签中添加的所有 HTML 注释(<!--或-->)都被 HTML 解析器忽略,但由 XHTML 解析器实现,添加时为 XHTML 注释掉 CSS 和 JavaScript。过去,许多人会在这些标签之间添加注释规则,以隐藏通常无法理解 CSS 或 Javascript 的非常旧的浏览器(1998 年之前的浏览器)中的样式和脚本。但是这种策略在没有附加代码的 XHTML 中失败了。
那么你如何将所有内部<style>和<script>标签结合起来,你应该关心吗?
我是一个最纯粹的人,并且喜欢我的HTML5内容仍然是XML/XHTML 友好的,无论我使用什么标记建议。我也喜欢我的页面在支持 CSS 的浏览器和不支持 CSS 的旧浏览器中运行。所以这里有两个解决方案来支持所有这些场景,并且仍然在现代浏览器中显示您的样式和脚本而不会出错。在现代 HTML5 浏览器中使用它们是完全安全的:
风格
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
/* put your styles here */
/*]]>*/-->
</style>
Run Code Online (Sandbox Code Playgroud)
脚本
<script type="text/javascript">
<!--//--><![CDATA[//><!--
// put your scripts here
//--><!]]>
</script>
Run Code Online (Sandbox Code Playgroud)
这两个代码块将允许 HTML5 浏览器正常使用 CSS 和 JavaScript,但对不支持这些技术的旧浏览器隐藏它们。
XHTML浏览器现在将解析您的CSS和JavaScript像以前一样,但不允许特殊字符,如<,>和&被解释为标记或实体/逃脱这将产生解析错误的字符。他们现在是 CDATA。
当然,您页面的 XML 解析器不会理解您的 CSS 和 JavaScript,但会接受您在其中添加的任何类型的文本,而不会尝试将它们解析为标记。他们现在是 CDATA。
示例如何工作:对于支持 HTML5 的现代浏览器,默认情况下,注释标记<!--和-->内部script和style标签被视为 CDATA 内部style和script元素,因此完全被忽略。之后,CSS 和脚本注释将顶部和底部行的其余部分包裹在 CSS 和脚本注释中,因此被删除。这意味着在较新的 HTML5 浏览器中始终安全地隐藏和忽略顶行和底行。不知道脚本或 CSS 的旧浏览器不会将script和style元素视为支持 CDATA 的元素,也不理解 CSS 和脚本注释,但会理解 HTML 注释。因此,他们将注释掉两个元素中每个元素中的所有 CSS 和脚本。首先应用第一行 HTML 注释 ( <!--/*-->),然后应用<![CDATA[/*>块被读取,这对他们来说成为一个空的未知元素并被忽略。后面的 HTML 注释隐藏了从那里到块末尾的所有 CSS 和脚本。最后<!]]>是另一个被忽略的空元素。对于 XHTML,这些解析器不会将这些元素中的内容作为 CDATA 读取,而是理解 HTML 注释。因此,他们删除了第一个评论块。<![CDATA[接下来为它们启动 CDATA 块,将标签内的所有样式和脚本包装起来,直到]]>已读。CDATA 块中的所有内容都像 HTML5 解析器现在所做的那样 - 作为普通的 CSS 和脚本 - 解释为 XHTML 解析器,而不是像以前那样作为 HTML 标记。所有 CSS 和脚本注释也适用。因为 XHTML 知道 CSS 和脚本,所以它现在仍然可以正确解析这些。XML 解析器的工作方式与使用这些规则的 XHTML 相同,只是不知道 CDATA 块内的 CSS 和脚本注释,它们只是将所有内容解释为元素内的纯字符文本。
| 归档时间: |
|
| 查看次数: |
30375 次 |
| 最近记录: |