2008年8月17日星期日

Web标准发展建议和实例 XHTML

使用HTML4.01是能够制作出现代的、结构化的、兼容标准的站点的。然而,为了做到向整洁的语义化的代码的转变,并且为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类型,假如能,就使用偃绮荒埽褪褂胻ext/html。


假如您使用的是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头部之后,一个被更改过的头部,将被发送到中间的缓存中(比如一些代理服务器),用来告诉他们文档的内容类型随着客户端对文档的请求而改变。


假如想了解更多的PHP检测脚本, 请参考Serving up XHTML with the correct MIME 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。

没有评论:

免责声明

1、本人是文盲,以上内容文字均不认识,也看不懂是什么意思(包括但不限于对所以上之内容的识别、阅读、理解、分析、记忆等);

2、本人过去、现在以及将来都不认识本文中提及当事人,且自古以来与该相对人无利益关系;

3、本人昨天、今天以及明天都没有或者不准备去本文所述地点。本文表述之事与本人无关。

4、本人在此发文(包括但不限于汉字、拼音、拉丁字母、斯拉夫字母、日语假名、阿拉伯字母、单词、句子、图片、影像、录音、以及前述之各种任意组合等等)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对文中观点。如需要详查请直接与键盘发明者及生产厂商法人代表联系;

5、人生有风险,上网需谨慎。本文不暗示、鼓励、支持或映射读者作出生活方式、工作态度、婚姻交友、股票债券买卖、子女教育的积极或消极判断。未成年人请在监护人陪同下阅读本文。无完全民事行为能力者,请立即关闭网页,并用20%高锰酸钾+75%乙醇对键盘、硬盘、电压插座、显示器、鼠标、cpu进行灌溉消毒;

6、如本人留言违反国家有关法律,请网络管理员及时删除本文,本人保留继续发文的权利;

7、因删贴不及时所产生的任何法律(包括宪法、加法、减法、乘法、除法、剑法、拳法、脚法、指法、民法、刑法、书法、公检法、基本法、劳动法、婚姻法、输入法、没办法、国际法、今日说法、吸星大法及文中涉及或可能涉及以及未涉及之法,各地治安管理条例)纠纷或责任本人概不负责;

8、本人谢绝任何跨省(包括但不限于跨国、跨洲、跨星球、跨星系)追捕行为。确因不抓不足以平民愤,或不抓就领不到薪水养家户口的公职人员,建议携带工作证、身份证、结婚证/离婚证、独生子女证、健康证、暂住证、毕业证、边防证、县以上政府机关出具的介绍信温情操作。抓捕按照以下排序倒序:作者、原作者以及网络管理员以及网络运行商、电信运营商、电力供应商、电脑生产销售商;

9、如回复内容导致回复者或第三方、第四方、第N次方怀孕,本人愿配合做亲子鉴定。