1. 程式人生 > >js傳中文和特殊符號到java處理方法

js傳中文和特殊符號到java處理方法

JavaWeb開發過程中從js通過Ajax傳遞引數到Controller層遇到的中文亂碼和特殊符號無法顯示的問題。

1.中文亂碼的處理方法:

(1)在js頁面相關程式碼如下

var url ="這些是中文";

url=encodeURI(encodeURI(url));//轉碼兩次,很關鍵

(2)在Controller層的java類中得到url編碼後的字串並解碼,相關程式碼如下

//獲得ajax傳來的字串

String memberName = request.getParameter("memberName");       

try {

//對字串進行解碼
memberName = java.net.URLDecoder.decode(memberName, "UTF-8");
  } catch (UnsupportedEncodingException e1) {
   e1.printStackTrace();
  }

當然如果遇到特殊字元的話比如說"&","+","#"都需要進行相應的處理如下

2.特殊字元傳遞過程中的處理

(1)js頁面的處理

var url= "#@+&這些帶有特殊字元";
url=encodeURI(encodeURI(url));//轉碼兩次,很關鍵
url = url.replace(/\+/g,"+");
url = url.replace(/\&/g,"&");
url = url.replace(/\#/g,"#");

(2)Controller層java類的處理

//獲得ajax傳來的字串

String memberName = request.getParameter("memberName");

//將+號編碼,否者解碼會消失  

memberName = StringUtil.replaceAll(memberName, "+", "+");
try {

//對字串進行解碼
   memberName = java.net.URLDecoder.decode(memberName, "UTF-8");
  } catch (UnsupportedEncodingException e1) {
   e1.printStackTrace();
  }

******************************

StringUtil.replaceAll()方法解釋如下:

 
 static public String replaceAll(String str, String oldStr, String newStr) {
  int i = str.indexOf(oldStr);
  int n = 0;
  while (i != -1) {
   str = str.substring(0, i) + newStr
     + str.substring(i + oldStr.length());
   i = str.indexOf(oldStr, i + newStr.length());
   n++;
  }
  return str;
 }

-----------------------------

得到特殊符號的編碼的方法如下:

 public String encode(String id) {
  String encode_id = "";
  try {
   encode_id = URLEncoder.encode(id, "UTF-8");
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  }
  return encode_id;
 }