URL地址含有中文參數的解決辦法

URL地址中含有中文字元是很麻煩的,前面描述過使用GET方法提交表單的情況,使用GET方法時,參數就是包含在URL中。

1.URL編碼

對於URL中的一些特殊字元,瀏覽器會自動進行編碼。這些字元除了"/?&"等外,還包括unicode字元,比如漢子。這時的編碼比較特殊。

IE有一個選項"總是使用UTF- 8發送URL",當該選項有效時,IE將會對特殊字元進行UTF-8編碼,同時進行URL編碼。如果該選項無效,則使用默認編碼"GBK",並且不進行 URL編碼。但是,對於URL後面的參數,則總是不進行編碼,相當於UTF-8選項無效。比如"中文.html?a=中文",當UTF-8選項有效時,將發送鏈接"%e4%b8%ad%e6%96%87.html?a=/x4e/x2d/x65/x87";而UTF-8選項無效時,將發送鏈接"/x4e/x2d/x65/x87.html?a=/x4e/x2d/x65/x87"。在此注意,不管此選項是否有勾選,後面的參數都沒有改變,改變的僅僅是地址當web server(tomcat)接收到該鏈接時,將會進行URL解碼,即去掉"%",同時按照ISO8859-1編碼(上面已經描述,可以使用URLEncoding來設置成其它編碼)識別。上述例子的結果分別是"/ue4/ub8/uad/ue6/u96/u87.html?a=/u4e/u2d/u65/u87"和"/u4e/u2d/u65/u87.html?a=/u4e/u2d/u65/u87",注意前者前面的"中文"兩個字恢復成了6個字元。這裡用"/u",表示是unicode。

所以,由於客戶端設置的不同,相同的鏈接,在伺服器上得到了不同結果。這個問題不少人都遇到,卻沒有很好的解決辦法。所以有的網站會建議用戶嘗試關閉UTF-8選項。不過,下面會描述一個更好的處理辦法。

opera中編碼的方式:

我查閱了很多的資料才發現在opera這個瀏覽器中採用的編碼方式是:

先用UTF8對字元串進行編碼,然後按RFC1738進行編碼

這是查到的文檔中這樣說明實際上採用的編碼方式為:

首先對漢字的GBK編碼轉化成UTF-8編碼,然後再採用urlcode的編碼方式轉化成url的漢字編碼。


推薦閱讀:

山東蒙陰蒙山雲蒙中文導遊詞
再次奉獻幾首中文歌
星巴克被批在華「暴利坑人」(FT中文網 2013-10-21)
年度重磅: 千年等一回,聽大寶法王「中文」講心經!!!
匈牙利【奧拉光環】中文字幕

TAG:辦法 | 參數 | 地址 | 中文 |