Ajax技術的核心為Javascript,而javascript使用的是UTF-8編碼,因此在頁面采用GBK或者其他編碼,同時沒有進行編碼轉換時,就會出現中文亂碼的問題。
以下是分別使用GET和POST方式傳值,并且頁面采用GBK和UTF-8編碼在IE和FF下的不同測試結果和出現亂碼時的解決方案。
傳值方式 | 客戶端編碼 | 服務器端編碼 | IE | FF | 解決方案 |
GET | UTF-8 | UTF-8 | 接收$_GET傳遞的參數時出現亂碼 | 正常 | 客戶端url=encodeURI(url) |
GET | GBK | GBK | 正常 | 接收$_GET傳遞的參數時出現亂碼 | 客戶端url=encodeURI(url) 服務器端 $str=iconv("UTF-8","GBK",$str) |
POST | UTF-8 | UTF-8 | 接收$_GET傳遞的參數時出現亂碼 | 正常 | 客戶端url=encodeURI(url) |
POST | UTF-8 | UTF-8 | 接收$_POST傳遞的參數時正常 | 接收$_POST傳遞的參數時正常 | 推薦采用方式 |
POST | GBK | GBK | 正常 | 接收$_GET傳遞的參數時出現亂碼 | 客戶端url=encodeURI(url) 服務器端 $str=iconv("UTF-8","GBK",$str) |
POST | GBK | GBK | 接收$_POST傳遞的參數時出現亂碼 | 接收$_POST傳遞的參數時出現亂碼 | 服務器端 $str=iconv("UTF-8","GBK",$str) |
注:JS、C#編碼解碼如下:
escape不編碼字符有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不編碼字符有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不編碼字符有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
[1]、JS: escape(name) :
js使用數據時可以使用escape。
例如:搜藏中history紀錄。
0-255以外的unicode值進行編碼時輸出%u****格式,其它情況下escape,encodeURI,encodeURIComponent編碼結果相同。
(1)JS解碼:unescape(name);
(2)C#:HttpUtility.UrlEncode() HttpUtility.UrlDecode();
[2]、JS: encodeURI():
進行url跳轉時可以整體使用encodeURI()
例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");
(1)JS解碼:decodeURI();
(2)C#解碼: decodeURIComponent();
[3]、JS: encodeURIComponent():
傳遞參數時需要使用encodeURIComponent,這樣組合的url才不會被#等特殊字符截斷。
例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7& u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a& gt;');</script>
(1)解碼使用decodeURIComponent(u);
(2)C#:[HttpContext.Current.]Server.UrlDecode(url) [HttpContext.Current.]Server.UrlEncode(url);
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!