【茶包射手專欄】QueryString的中文編碼問題

同事在測試程式時,為求簡便,在IE地址列直接輸入測試用的參數,例如: MyApp.aspx?q=中文 (註: 此為不良示範,QueryString中如要指定英文字母及數字以外的字元,均應使用UrlEncode以求保險),結果ASPX中Request["q"]會抓到亂碼。

利用Visual Studio Debug時監看Request物件,會發現QueryString的原始Byte Array內容中,中文字是以BIG5方式編碼方式傳送的(有興趣研究的人可以試著用中文編碼解析工具驗證),而Request Encoding預設是UTF-8,最後當然是亂碼收場,並不意外。測試發現,如果把Request Encoding設成big5,Request["q"]便可抓到正確的值,但會破壞網站原本來往均應為UTF-8的設計,並不合理。因此,避免在URL中直接指定非ASCII文字,必要時使用URLEncode編碼過才是根本解決之道。

不過,在追查過程中,引發了另一個有趣的問題: IE的選項中有個"Send UTF-8 URLs",難道這個設定不能解決這個問題? 由於預設IE7的Send URL-8 URLs就是開啟的,顯然證實了該選項無法解決QueryString中直接夾帶中文的問題!

利用IE瀏覽"http: //someServer/中文.aspx?q=中文"並開啟Microsoft Network Monitor 3.1,分別觀察開啟或關閉"Send UTF-8 URLs"後所發出的HTTP Request封包。

結論是,"Send UTF-8 URLs"選項只會影響IE7送出Request中網頁檔案名稱的UrlEncode編碼(橘色框),至於QueryString中的中文字,則一律使用Windows預設的non-Unicode編碼(在正體中文環境中,多半就是BIG5)轉成Byte Array(綠色框)。所以,為了避免自找麻煩,在傳遞QueryString參數時,請多利用UrlEncode(Javascript中可用escape()函數)。

 【延伸閱讀】

Published 16 July 2008 07:31 AM 由 Jeffrey


意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 

請輸入以上的數字:

【請注意】意見送出後可能需要幾分鐘才會出現在網頁上,請耐心等候。

搜尋

Go

<July 2008>
SunMonTueWedThuFriSat
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS


BlogLook Score and Rank

Syndication