﻿# 一個常用又不知道是做什麼用的 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](http://msdn2.microsoft.com/en-us/library/Aa752010.aspx)
