HTML和XHTML

可扩展超文本标记语言XHTML(eXtensible HyperText Markup Language)是将超文本标记语言HTML(HyperText Markup Language)作为XML应用而重新定义的标准。

在HTML5标准中定义了两种语法(HTML 4.01XHTML 1)。此标准中可以通过定义一个特殊的DOCTYPE标签来XHTML,但是并没有太多浏览器去实现这一标准。所以最后HTML5标准推翻了这个决定。

可以通过改变MIME类型(包含在HTTP请求中的Content-Type)来指示语法的选择:如果需要使用XHTML,MIME类型应该为application/xhtml+xml,MIME类型为text/ html则不使用XHTML。

适当的MIME类型必须存在于HTTP请求中的Content-Type中。如果只把MIME类型写在HTML标签中,如<meta http-equiv=…>,依然会被当作text/html执行。

HTML文档规范

HTTP/1.1 200 OK
Content-Type: text/html <!DOCTYPE html>
<html lang=en>
<head>
<meta charset=utf-8>
<title>HTML</title>
</head>
<body>
<p>I am a HTML document</p>
</body>
</html>

XHTML文档规范

HTTP/1.1 200 OK
Content-Type: application/xhtml+xml <html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>XHTML</title>
</head>
<body>
<p>I am a XHTML document</p>
</body>
</html>

XHTML兼容性

目前大多数浏览器都支持XHTML,其中包括Firefox、Chrome、Safari、Opera和IE浏览器(IE 9)。(Internet Explorer 8和旧浏览器在看到正确配置的XHTML MIME类型的XHTML文档时,会显示未知文件类型的下载对话框)。另外,有许多流行的JavaScript库和开发工具对XHTML也并不支持。

XHTML和HTML的区别

XHTML是XML应用,所以XHTNL的代码规范要求要比HTML更严格。但对于习惯HTML的程序员有时可能会带来一些不便,如比较语句a<b中的<会被解析为一个标签,造成代码运行与预期不符。为了应对这些问题,慢慢有了以下的规范:

1.JavaScript中<&应包含在CDATA代码块中

在XHTML中JavaScript的闭合符不能在CDATA代码块以外的地方存在。如以下错误示例:

<script type="text/javascript">
var i = 0; while (++i < 10)
{
// ...
}
</script>

可以通过CDATA代码块的方式解决,如下例:

<script type="text/javascript">
<![CDATA[
var i = 0; while (++i < 10)
{
// ...
}
]]>
</script>

也有其他方法解决该问题,如将<替换为&lt;。但这样减低了代码可读性,所以不推荐使用。

2.注释<!—— ... ——> 中注释内容不能再包含双破折号——

在XHTML中,以<!—— ... ——>形式注释的内容不应包含双破折号——,如以下错误示例:

<script type="text/javascript">
<!--
var i;
var sum = 0; for (i = 10; i > 0; --i)
{
sum += i;
}
// -->
</script>

示例中以<!—— ... ——>形式注释的内容依然会被解析。在旧浏览器版本中,有经验的开发者在使用内联样式和内联脚本时通常会将其内容包含在注释中。如下例:

<style type="text/css">
<!--
body {background-color: blue; color: yellow;}
-->
</style>
<script type="text/javascript">
<!--
var i = 0;
var sum = 0; for (i = 0; i < 10; ++i)
{
sum += i;
}
alert('sum = ' + sum);
// -->
</script>

这是因为在旧浏览器版本中,内联样式和内联脚本还未普及,使用style和script标签不会被正常解析,而是直接把标签的内容输出。如下例:

<script>
var i = 0;
alert(i);
</script>

这段JS代码在旧浏览器版本中,不会执行,而是直接输出以下内容:

var i = 0;
alert(i);

不过,目前现代浏览器都已经开始支持内联样式和内联脚本,所以一般不采用<!—— ... ——>形式注释来实现兼容旧浏览器这种写法。

参考文献

MDN —— Glossary XHTML

MDN —— Properly Using CSS and JavaScript in XHTML Documents

HTML和XHTML区别的更多相关文章

  1. HTML与XHTML区别

    1. html超文本标记语言,xhtml可扩展超文本标记语言,xhtml是将html作为xml的应用重新定义的一个标准. 2. xhtm比html的代码规则严格很多,例如'a < b'在xhtm ...

  2. HTML 和 XHTML 区别

    1.初级改善 为页面添加正确的DOCTYPE 很多设计师和开发者都不知道什么是DOCTYPE,DOCTYPE有什么用. DOCTYPE是document type的简写.主要用来说明你用的XHTML或 ...

  3. The first day of HTML

    这是韩顺平老师的<轻松搞定网页设计(html.css.js)>,讲的还凑合,仅作入门.决定还是做好笔记,记录学习的过程,这是HTML的第一天. HTML(HyperText Mark-up ...

  4. CSS 基础总结

    CSS基础 Doctype 声明位于文档中的最前面,处于 标签之前.告知浏览器的解析器,用什么文档类型 规范来解析这个文档. 在标准模式中,浏览器根据规范呈现页面: 在混杂模式中,页面以一种比较宽松的 ...

  5. 前端面试题 ---- html篇

    想要换工作了,转载自https://www.cnblogs.com/zhangshuda/p/8464772.html,感谢原博主. 一.html 1.html和xhtml区别 1. html:超文本 ...

  6. XHTML跟HTML的区别

    其实二者并没有什么区别,只是THTML的要求更加严格,比如说 1.XHTML 元素必须被正确地嵌套. 错误:<p><span>this is example.</p> ...

  7. HTML、XHTML XML和DHTML的区别

    XML与HTML的设计区别是:XML是用来存储数据的,重在数据本身.而HTML是用来定义数据的,重在数据的显示模式 XHTML(The Extensible HyperText Markup Lang ...

  8. xml、xhtml、html、dhtml的区别

    1.XML 可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 可扩展标记语言可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内 ...

  9. HTML、XHTML和HTML5区别与联系

    1.XHTML与HTML最大的区别: ① XHTML标签名必须小写(错误:<Div> 正确:<div>) ② XHTML元素必须被关闭(错误:<p>  正确:< ...

随机推荐

  1. 类ArrayList

    什么是ArrayList类 Java提供了一个容器 java.util.ArrayList 集合类,他是大小可变的数组的实现,存储在内的数据称为元素.此类提供一些方法来操作内部存储的元素. Array ...

  2. 正则表达式和re模块

    目录 re的元字符 字符集[ ] 转义符 分组 ( ) |符号 re下的常用方法 分组 re的元字符 import re ret = re.findall("e..a", &quo ...

  3. 关联分析中寻找频繁项集的FP-growth方法

    关联分析是数据挖掘中常用的分析方法.一个常见的需求比如说寻找出经常一起出现的项目集合. 引入一个定义,项集的支持度(support),是指所有包含这个项集的集合在所有数据集中出现的比例. 规定一个最小 ...

  4. Laravel-任务调度

    简介Cron 是 UNIX.SOLARIS.LINUX 下的一个十分有用的工具,通过 Cron 脚本能使计划任务定期地在系统后台自动运行.这种计划任务在 UNIX.SOLARIS.LINUX下术语为 ...

  5. Windows安装MongoDB 4.0并赋予用户访问权限

    第一部分 Windows安装MongoDB-4.0 第一步:下载MongoDB:https://www.mongodb.com/download-center?jmp=nav#community 我目 ...

  6. Cnblogs美化总结

    测试 扩展阅读 [转载]详谈如何定制自己的博客园皮肤 - 云+社区 - 腾讯云谢谢!! [PS]3步搞定博客园界面风格 - nowgood - 博客园 [分享]博客美化(6)为你的博文自动添加目录 - ...

  7. openflow packet_out和packet_in分析

    任务目的 1. 掌握OpenFlow交换机发送Packet-in消息过程及其消息格式. 2. 掌握OpenFlow控制器发送Packet-out消息过程及其消息格式. 实验原理 Packet-In 使 ...

  8. postgresSQL 实现数据修改后,自动更新updated_date/ts等字段

    1. 需求说明: 实现MYSQL中有on update CURRENT_TIMESTAMP 2. 需求分析 由于数据库迁移需要将MYSQL中的数据迁移到postgresSQL中,由于MYSQL中有on ...

  9. Asp.net MVC 权限过滤器实现方法的最佳实践

    在项目开发中,为了安全.方便地判断用户是否有访问当前资源(Action)的权限,我们一般通过全局过滤器来实现. Asp.net MVC 页面中常见的权限判断使用过滤器主要在以下几种情况(根据权限判断的 ...

  10. Linux 内核文档翻译 - kobject.txt

    原文地址:Linux 内核文档翻译 - kobject.txt 作者:qh997 Everything you never wanted to know about kobjects, ksets, ...