1. 程式人生 > >java 位址列傳中文

java 位址列傳中文

1、位址列傳遞中文之前,將要傳遞的中文引數進行編碼,在服務端接收時再進行解碼。


如:
客戶端(傳參):

$(function(){
   $('#search').click(function(){
     window.location.href="user.do?type=search&userName="+encodeURI(encodeURI($('#s_userName').val()));
   });
});


服務端(接收):
String userName = request.getParameter("userName");
userName = java.net.URLDecoder.decode(userName, "UTF-8");


注:為什麼用兩次:encodeURI()進行編碼,而在服務端只進行了一次解碼?
因為Tomcat伺服器會自動幫你做一次URLDecode,所以再加上你自己在程式碼裡面寫的URLDecode,一共就是兩個Decode了,既然要兩次Decode,當然就需要兩次Encode了。或許你會問,乾脆只Encode一次,然後在java程式碼裡不Decode,呵呵,這個是不行的,這其實也就是為什麼要進行Encode的原因吧


在客戶端對引數進行二次編碼,可以有效的避開“提交多位元組字元”的這個棘手問題。
因為第一次編碼,你的引數內容便不帶有多位元組字元了,成了純粹的 Ascii 字串。(這裡把編第一次的結果叫成 [STR_ENC1] 好了。[STR_ENC1] 是不帶有多位元組字元的)再編一次後,提交,接收時容器自動解一次 (容器自動解的這一次,不管是按 GBK 還是 UTF-8 還是 ISO-8859-1 都好,都能夠正確的得到 [STR_ENC1])然後,再在程式中實現一次 (Java中通常使用 java.net.URLDecoder(***, "UTF-8")) 就可以得到想提交的引數的原值。