5. (X)HTML
使用HTML4.01是可以制作出現(xiàn)代的、結(jié)構(gòu)化的、兼容標(biāo)準(zhǔn)的站點(diǎn)的。然而,為了做到向整潔的語(yǔ)義化的代碼的轉(zhuǎn)變,并且為XML和未來(lái)的其他標(biāo)記語(yǔ)言做好準(zhǔn)備,建議大家使用XHTML1.0 Strict來(lái)創(chuàng)建新的站點(diǎn),本文中的例子用的就是XHTML1.0 Strict。
XHTML 1.0 是以XML 1.0對(duì)HTML 4的改進(jìn),它的發(fā)展,以用來(lái)代替HTML。XHTML 1.0 Strict(這是我一直所倡導(dǎo)的)不支持表現(xiàn)類的標(biāo)記(HTML 4.01其實(shí)也不支持,但是現(xiàn)在我們討論的是XHTML)。正因?yàn)榇耍琗HTML1.0 Strict 就促使了表現(xiàn)與結(jié)構(gòu)的分離。
XHTML 1.1(XHTML的最新版)從技術(shù)上說(shuō),使用起來(lái)有一些復(fù)雜。因?yàn)橐?guī)定中聲明XHTML 1.1的文檔應(yīng)當(dāng)使用MIME類型 application/xhtml+xml, 不應(yīng)當(dāng)被看作text/html。 并不是嚴(yán)格的禁止使用text/html, 只是不建議使用。 另外一方面,XHTML 1.0 (應(yīng)當(dāng)使用 application/xhtml+xml)同樣可以使用MIME類型 text/html, 如果它是可兼容的HTML。W3C的注解XHTML Media Types 中包括了MIME類型(W3C推薦使用的類型)的概要。
不幸的是,一些老的瀏覽器包括IE不能識(shí)別MIME類型 application/xhtml+xml, 并且會(huì)終止顯示源代碼,甚至?xí)纱嗑芙^顯示整個(gè)文檔。
如果你想使用application/xhtml+xml, 你應(yīng)當(dāng)讓服務(wù)器檢驗(yàn)一下讀取文檔的瀏覽器是否支持MIME類型,如果能,就使用,染J荒埽褪褂胻ext/html。
如果你使用的是PHP作為服務(wù)器端的腳本,那么下面的這段腳本能夠讓你的文檔針對(duì)不同的瀏覽器使用不同的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"); } ?>
這個(gè)腳本是檢測(cè)是否用戶代理發(fā)送了一個(gè)包含“application/xhtml+xml”的Accept HTTP頭,或者如果用戶代理是W3C HTML校驗(yàn)器(不會(huì)發(fā)送合適的Accept HTTP頭的,但是它依然支持 application/xhtml+xml)。如果上面檢測(cè)的回答是肯定的,文本將被看作 application/xhtml+xml。那些瀏覽器也會(huì)收到一個(gè)XML的聲明。對(duì)于另外的一些瀏覽器(包括IE的是所有版本),文檔都將被看做 text/html。在文檔中也沒(méi)有添加額外的XML聲明,因?yàn)槿绻砑拥脑,?huì)使IE/WIN轉(zhuǎn)化到我們所不希望的Quirks模式。
在Content-Type頭部之后,一個(gè)被更改過(guò)的頭部,將被發(fā)送到中間的緩存中(比如一些代理服務(wù)器),用來(lái)告訴他們文檔的內(nèi)容類型隨著客戶端對(duì)文檔的請(qǐng)求而改變。
如果想了解更多的PHP檢測(cè)腳本, 請(qǐng)參考Serving up XHTML with the correct MIME type. 那個(gè)腳本對(duì)請(qǐng)求客戶端的q-rating(它聲明了更夠很好的支持某種MIME類型)進(jìn)行了考慮,在發(fā)送text/html 文檔給不支持 application/xhtml+xml的客戶端之前,把XHTML轉(zhuǎn)化成HTML 4。
下面的是一個(gè)相似的腳本,針對(duì)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" %>
值得注意的是,當(dāng)一個(gè)文檔的MIME type是application/xhtml+xml時(shí),一些瀏覽器(像Mozilla)是不會(huì)顯示包含錯(cuò)誤的文檔的。這在開(kāi)發(fā)過(guò)程中是一件好事,但是對(duì)于那些剛剛更新完站點(diǎn)且不是XHTML專家的人來(lái)說(shuō),就會(huì)出現(xiàn)一些問(wèn)題,除非您能確保所有的代碼都是規(guī)范的。如果出現(xiàn)了這種問(wèn)題,您可以考慮使用HTML 4.01 Strict來(lái)代替XHTML。
下面列出了一些在使用XHTML 1.0 Strict中需要特別注意的地方:
-
永遠(yuǎn)使用小寫(xiě)字母,讓引號(hào)伴隨者屬性: 所有元素和屬性的名字都必須使用小寫(xiě),所有屬性值必須使用雙引號(hào)。
錯(cuò)誤: <A HREF="index.html" CLASS=internal> 正確: <a href="index.html" class="internal">
-
關(guān)閉所有的元素:在HTML中一些元素沒(méi)有必要被關(guān)閉。當(dāng)下一個(gè)元素開(kāi)始的時(shí)候,上一個(gè)元素就自動(dòng)被關(guān)閉。XHTML中是不允許這樣的。所有元素都必須被關(guān)閉,即使其中沒(méi)有內(nèi)容(如 <img>)
錯(cuò)誤: <li>Item 1 正確: <li>Item 1</li>
錯(cuò)誤: <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 正確: <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>
錯(cuò)誤: <br> 正確: <br />
錯(cuò)誤: <img src="image.jpg" alt=""> 正確: <img src="image.jpg" alt="" />
-
屬性不能被縮減: 在HTML里,一些屬性可以被縮減。而XHTML則不允許這樣做。
錯(cuò)誤: <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 (對(duì)于某些元素)和 background。
出處:藍(lán)色理想
責(zé)任編輯:紅色黑客
上一頁(yè) 了解基礎(chǔ)變化 下一頁(yè) (X)HTML [2]
◎進(jìn)入論壇網(wǎng)頁(yè)制作、網(wǎng)站綜合版塊參加討論
|