在做專案的過程中,我們經常會建立各種各樣的規範,以方便團隊之間更好的合作更好的完成專案;同樣我們也經常會聽到各種各樣的協議,例如Google的IM軟體Gtalk使用的開放的XMPP協議,只要其他IM軟體也遵循XMPP協議就能與Gtalk使用互通;而互聯網上的信息無以計數,這些信息本身是獨立存在的,如何將其串聯並呈現在用戶眼前,就需要使用到HTTP協定。
同樣的道理,因為瀏覽器們各自的核心不同,對於預設樣式的渲染也不盡相同,所以就需要一份各瀏覽器都遵循的規則來保證同一個網頁文檔在不同瀏覽器上呈現出來的樣式是一致的,這個規則就是DOCTYPE宣告。
因為網路是互通的,所以任意的兩個或以上的網頁文檔都可能會涉及到資料交換,而因為xml語言是允許使用者自訂標籤的,所以任意兩個交換的文檔就可能會出現相同的標籤,從而導致相同標籤的衝突,所以就需要一個命名空間以區分開交換文件中可能存在的相同標籤。
XHTML做為HTML轉向XML的一種語言,並不能實現XML語言中的使用者自訂標籤,所以XHMTL文件中的命名空間都是相同的:
xmlns即是XHTML namespace的縮寫,也就是所謂的「命名空間」。與DOCTYPE聲明一樣,xmlns也屬於一種聲明。與HTML文檔中仍然存在DOCTYPE宣告不一樣的是,在HTML文檔是不存在xmlns的,我們平常所見到的xmlns都是出現在XHTML文檔中的。
在製作一個網頁的時候,除了在開始的時候聲明DOCTYPE(文檔類型)之外,如果是XHTML文檔還需要聲明命名空間,而第三個需要聲明的就是網頁文檔的字符編碼類型:
為了能被瀏覽器正確的解釋以及通過W3C驗證,每個XHTML文件都應該聲明所使用的字元編碼。很多時候網頁文檔出現亂碼大部分都是因為字元編碼不對而造成的。
utf-8是unicode的一種變長度的編碼表達方式,做為一種全球通用型的字符編碼正越來越多的網頁文檔所使用,使用utf-8字符編碼的網頁可最大程度的避免不同區域的使用者造訪相同網頁時因字元編碼不同而導致的亂碼現象。
但是當我們打開國內的大多數網站看,特別是門戶型的大型網站,關於字符編碼的聲明卻並非是utf-8,而是gb2312:
當然,除了gb2312外還有一些網站使用gbk或是gb18030編碼,這三種字元編碼都是屬於簡體中文字符集。也就是說,如果一台電腦沒有安裝簡體中文字元集時,當它存取字元編碼為gb2312的中文網頁時,則顯示出來的是亂碼。
既然使用gb2312字元編碼時會因為不同區域的使用者存取而可能出現亂碼現象,那為何不使用utf-8呢?
其中一個原因可能歷史遺留的原因,而另一個更重要的原因應該是由於兩種編碼的存儲方式不同而造成的文檔體積不同。
使用gb2312字符編碼集時,一個漢字是佔用2個位元組的大小,而一個漢字在utf-8編碼中所佔的字節數卻往往都是在3個字節,甚至是3個以上的位元組。所以對於同一個中文文件來說,使用gb2312字元編碼來進行儲存的體積是要小於utf-8編碼所儲存的文檔大小的。
而對於文字多訪問量大的中文網站來說,使用gb2312編碼的網頁文檔在下載傳輸上可以節省下不小的流量,再者是因為中文網站的用戶群基本上都鎖定在中文用戶上,這些也就是很多網站使用gb2312編碼而不是utf-8編碼的原因。
但是文字多訪問量大的網站,國內並不多,再加上可能成對的亂碼問題,所以在製作網頁的時候推薦使用utf-8編碼。
當然,不管用何種編碼,最重要的是整站使用的編碼要統一。
對於字符編碼的聲明除了上面的方式,還可能看到另一種聲明方式:
這種聲明方式是針對老版本的瀏覽器的,在瀏覽器已經普遍更新換代的今天已經不建議使用這種聲明方式。
以上就是解讀HTML:命名空間與字元編碼的內容,更多相關文章請關注PHP中文網(www.php.cn)!