關於XHTML的簡單理解(轉帖)

使用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="http://www.loveqiutian.cn/html/3/38/38807/image.jpg" alt="">正確: <img src="http://www.loveqiutian.cn/html/3/38/38807/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" />

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章