The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

一個常用又不知道是做什麼用的 META 設定

這段 <META> 幾乎在所有網頁都會出現,但你真的知道這段 meta 是用來定義什麼的嗎?

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=big5">

我想大多數的人都是「望文生義」,「以為」這段 HTML 是用來定義該頁面的編碼字集(Character Set)!

其實這樣的定義也「不算錯」啦,只是說明的不精確,嚴格來講算是對一半!

正確來說,這段 META 是定義「網頁送出的編碼字集」,而不是用來定義「該網頁應該顯示的字集」!

如果你要定義該網頁「顯示」的字集,最正確的用法應該是在 HTTP Header 中定義 Content-Type 才是!

但為什麼要在頁面中宣告 Content-Type 這個 META Tag 呢?!就讓我娓娓道來吧!

就因為網頁的編碼字集(Character Set)太混亂了,造成很多字集轉換的問題,現在大家都用 UTF-8 當作文件的字集,已經簡化不少問題了,但是在早期卻不是這樣。

想當年(也沒有很久啦)我們大家都是用 Big5 當作中文字集,但是如果有人在網頁上輸入「非 Big5 字集」的文字 (如:日文、簡體字)會怎麼樣呢?通常有兩種結局:

1. 輸入的文字變成問號 ( ? )

2. 輸入的文字變成 HTML Entities(也就是像 &#26356; 這種格式)

我想變成問號的居多吧!(相信很多人會莞爾一笑)

那就是因為你沒有設定正確的 META Tag!!!那設定這個 META Tag 就很重要了!

如果你的網頁是用 Big5 編碼,而 META 設定為<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=big5">〕的話,代表從表單送出的文字會以 Big5 編碼,如果表單中輸入的文字不在 Big5 編碼範圍內的話,就會改以 HTML Entities 送出!

如果你沒有設定這個 META 的話,瀏覽器就會用 UTF-8 的字集送出!如果你的 Server 端程式或資料庫無法處理這類 UTF-8 編碼文字的能力的時候,就會變成問號!

但是我也看過許多網站雖然有設定正確的 META,不過卻沒有正確的處理 HTML Entities,當這些 HTML Entities 要顯示在網頁上的時候,卻又被 HTML Encode 過一遍,反而造成使用者的困擾,實在很可惜!

我在 MSDN 上有找到一個網頁說明這個原理,有空的人可以看一下:

Character Set Recognition
http://msdn2.microsoft.com/en-us/library/Aa752010.aspx