js传中文和特殊符号到java处理方法

2015/10/6 13:8 下午 目录  开发总结 评论

JavaWeb开发过程中从js通过Ajax传递参数到Controller层遇到的中文乱码和特殊符号无法显示的问题。

1. 中文乱码的处理方法:

1.1 在js页面相关代码如下

var url ="这些是中文";
url=encodeURI(encodeURI(url));//转码两次,很关键

1.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. 特殊字符传递过程中的处理

2.1 js页面的处理

var url= "#@+&这些带有特殊字符";
url=encodeURI(encodeURI(url));//转码两次,很关键
url = url.replace(/\+/g,"+");
url = url.replace(/\&/g,"&");
url = url.replace(/\#/g,"#");

2.2 Controller层java类的处理

   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;
    }