首页 > 常识 > 互联网 > 网站制作 > 常见问题

关于XHTML的简单理解

作者:  时间:2016-08-02
描述:现在只有很少的HTML文档有一个正确而完整的doctype或者DTD (文档类型声明)。它现在更多的是在起装饰作用而没有什么功能作用,刚开始时,一个doctype的定义,对浏览器解释文档起到很大的作用。
  使用HTML是可以制作出现代的、结构化的、兼容标准的站点的。然而,为了做到向整洁的语义化的代码的转变,并且为XML和未来的其他标记语言做好准备,建议大家使用XHTML1.0 Strict来创建新的站点,本文中的例子用的就是XHTML1.0 Strict。

  XHTML 1.0 是以XML 1.0对HTML 4的改进,它的发展,以用来代替HTML。XHTML 1.0 Strict(这是我一直所倡导的)不支持表现类的标记(HTML 4.01其实也不支持,但是现在我们讨论的是XHTML)。正因为此,XHTML1.0 Strict 就促使了表现与结构的分离。

  XHTML 1.1(XHTML的最新版)从技术上说,使用起来有一些复杂。因为规定中声明XHTML 1.1的文档 应当 使用MIME类型 application/xHTML+XML, 不应当 被看作text/HTML。 并不是严格的禁止使用text/HTML, 只是不建议使用。 另外一方面,XHTML 1.0 ( 应当 使用 application/xHTML+XML)同样 可以 使用MIME类型 text/HTML, 如果它是可兼容的HTML。W3C的注解 XHTML Media Types 中包括了MIME类型(W3C推荐使用的类型)的概要。

  不幸的是,一些老的浏览器包括IE不能识别MIME类型 application/xHTML+XML, 并且会终止显示源代码,甚至会干脆拒绝显示整个文档。

  如果你想使用application/xHTML+XML, 你应当让服务器检验一下读取文档的浏览器是否支持MIME类型。

  如果你使用的是PHP作为服务器端的脚本,那么下面的这段脚本能够让你的文档针对不同的浏览器使用不同的MIME类型。

<?PHP if (stristr($_SERVER[HTTP_ACCEPT], application/xHTML+XML) || stristr($_SERVER[HTTP_USER_AGENT],W3C_Validator)) { header(Content-Type: application/xHTML+XML; charset=iso-8859-1); header(Vary: Accept); echo(<?XML version=1.0 encoding=iso-8859-1?>n); } else { header(Content-Type: text/HTML; charset=iso-8859-1); header(Vary: Accept); } ?>

  这个脚本是检测是否用户代理发送了一个包含“application/xHTML+XML”的Accept HTTP头,或者如果用户代理是W3C HTML校验器(不会发送合适的Accept HTTP头的,但是它依然支持 application/xHTML+XML)。如果上面检测的回答是肯定的,文本将被看作 application/xHTML+XML。那些浏览器也会收到一个XML的声明。对于另外的一些浏览器(包括IE的是所有版本),文档都将被看做 text/HTML。在文档中也没有添加额外的XML声明,因为如果添加的话,会使IE/WIN转化到我们所不希望的Quirks模式。

  在Content-Type头部之后,一个被更改过的头部,将被发送到中间的缓存中(比如一些代理服务器),用来告诉他们文档的内容类型随着客户端对文档的请求而改变。

  那个脚本对请求客户端的q-rating(它声明了更够很好的支持某种MIME类型)进行了考虑,在发送text/HTML 文档给不支持 application/xHTML+XML的客户端之前,把XHTML转化成HTML 4。

  下面的是一个相似的脚本,针对ASP(VBSscript): <% If InStr(Request.ServerVariables(HTTP_ACCEPT), application/xHTML+XML) > 0 Or InStr(Request.ServerVariables(HTTP_USER_AGENT), W3C_Validator) > 0 Then Response.ContentType = application/xHTML+XML Response.Write(<?XML version=1.0 encoding=iso-8859-1?> & VBCrLf); Else Response.ContentType = text/HTML End If Response.Charset = iso-8859-1 %>

  值得注意的是,当一个文档的MIME type是application/xHTML+XML时,一些浏览器(像Mozilla)是不会显示包含错误的文档的。这在开发过程中是一件好事,但是对于那些刚刚更新完站点且不是XHTML专家的人来说,就会出现一些问题,除非您能确保所有的代码都是规范的。如果出现了这种问题,您可以考虑使用HTML 4.01 Strict来代替XHTML。

  下面列出了一些在使用XHTML 1.0 Strict中需要特别注意的地方:

永远使用小写字母,让引号伴随者属性: 所有元素和属性的名字都必须使用小写,所有属性值必须使用双引号。

错误: <A HREF=../../index.HTML CLASS=internal> 正确: <a href=../../index.HTML class=internal>

关闭所有的元素: 在HTML中一些元素没有必要被关闭。当下一个元素开始的时候,上一个元素就自动被关闭。XHTML中是不允许这样的。所有元素都必须被关闭,即使其中没有内容(如 <img>)

错误: <li>Item 1 正确: <li>Item 1</li>

错误: <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 正确: <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>

错误: <br> 正确: <br />

错误: <img src=../../image.jpg alt=> 正确: <img src=../../image.jpg alt= />

属性不能被缩减: 在HTML里,一些属性可以被缩减。而XHTML则不允许这样做。

错误: <input type=checkbox id=checkbox1 name=checkbox1 checked> 正确: <input type=checkbox id=checkbox1 name=checkbox1 checked=checked />

不要使用被排斥的元素: 一些元素和属性在HTML 4.01 Transitional和XHTML 1.0 Transitional是被允许的,而在XHTML 1.0 Strict下则不被支持(还有in HTML 4.01 Strict)。比如<font>、<center>、 alink、align、width、 height (对于某些元素)和 background。   Doctype(文档类型)

  现在只有很少的HTML文档有一个正确而完整的doctype或者DTD (文档类型声明)。它现在更多的是在起装饰作用而没有什么功能作用,但是就在几年前刚开始的时候,一个doctype的定义,对浏览器解释这个文档起到很大的作用。

  所有的HTML和XHTML文档都必须使它的doctype声明合法化。 doctype可以告诉我们在文档中使用的是什么版本的HTML和XHMTL,也决定了校验器以何种方式校验,浏览器以何种模式解释。如果文档中有一个正确而完整的doctype,许多浏览器将会转换到标准模式,那就意味着与CSS的规范更加接近了。因为浏览器不必再把时间用在弥补、解释不规范的HTML上了,所以文档的显示速度也加快了。这同样也会减少在不同浏览器上显示的差异性。

  下面的doctype声明是针对XHTML 1.0 Strict的,它将会促使拥有“文档类型转换器”的浏览器使用他们的标准模式。

<!DOCTYPE HTML PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN http://www.w3.org/TR/xHTML1/DTD/xHTML1-strict.dtd>

   字符编码

  所有的XHTML文档都应当定义他们的字符编码。

  最好的网页编码方法是配置你的网络服务器,使其发送带有字符编码的HTTP content-type 头部。关于如何使用去做的具体细节,请参阅你所使服务器软件的说明。

  如果你使用的是Apache,你可以通过在你的 .htaccess 文件中添加一两条规则来定义字符编码。例如,你的所有文件使用的都是utf-8, 添加下面的语句:   AddDefaultCharset utf-8

  定义具有相同扩展名的文件的字符编码,则使用下面的代码:   AddCharset utf-8 .HTML

  如果你的服务器允许你用PHP脚本时,你可以使用以下的代码来定义字符编码。 <?PHP header(Content-Type: application/xHTML+XML; charset=utf-8); ?>

  如果你的页面是HTML, 请把 application/xHTML+XML 换成 text/HTML 。不管是什么原因,如果你不能配置你的服务器使其定义为你所使用的字符编码,你可以在 <head>中使用 <meta> 。即使你的服务器配置正确了,这也是个定义字符编码的好方法。

  例如, 下面的 <meta> 告诉浏览器这是一个使用 ISO-8859-1 字符编码的文档: <meta http-equiv=content-type content=text/HTML; charset=ISO-8859-1 />

从手机浏览器访问《生活宝典》

站内搜索
  • 网页中删掉 XHTML 1.0 这段代码有什么影响?
  • 与HTML相比XHTML有什么特点?
  • 对于 XHTML 的介绍及评论
  • XHTML 1.0和HTML 4.01有啥不同?
  • JS代码改成规范xhtml 1.0 标准
  • 网页中删掉XHTML 1.0这段代码有什么影响?
  • 解放思想 精简代码 删除xhtml1-transitional.dtd
  • 微商帮
    世界网站大全
    中国科研团队:大象的长鼻子是如何越变越长了
    中国科研团队:大象的长
    自己是否能够像自己想的那样做成一件事,身旁人的判断会比自己准确
    自己是否能够像自己想
    火宫殿:吃喝玩乐看,烧香拜神佛,红火的庙会经济
    火宫殿:吃喝玩乐看,烧香
    眼见为实也不为实,更须谨慎看到的并非全貌
    眼见为实也不为实,更须