地址栏传递中文参数到后台乱码

ajax穿中文参数在后台乱码,这是个常见的问题,我在这里总结了一下解决方法。

1.一般用form直接提交中文参数是不会出现乱码的,因为form进行了封装。

2.在地址栏上传递中文参数到后台,后台需要对接收到到的字符进行处理:(仅用于地址栏的处理,如果在地址栏中使用第三种方法进行转码则地址栏会自动把编码有转换成中文的,起不到转码的作用)

request.setCharacterEncoding("UTF-8");

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

provinceName = new String(provinceName.getBytes("ISO8859-1"), "UTF-8");//防止乱码强制转换 

 

3.ajax提交,中文有乱码,只能先把中文进行编码在传递,到后台进行解码即可。(引用于ajax提交)

前端js:

var name=encodeURI($('#JS_MLL_search_header_input').val());这是进行中文编码了。

unescape(str) :ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

encodeURI(str):这个推荐使用

后台解码:

System.out.println(URLEncoder.encode("和韩国韩国","utf-8"));//这个就相当于JS里面的encodeURI(str)这个方法。

System.out.println(URLDecoder.decode(URLEncoder.encode("和韩国韩国","utf-8"),"utf-8"));

 

4.ajax提交form表单,一般form里面有很多参数,如果采用ajax提交需要一个接一个的拼接参数很苦逼,就不能采用方法三那种单个编码了,还好jQuery为我们提供一个比较好的方法,$('form').serialize(),这个方法直接把form里面的参数全部自动拼接为url参数的格式,例如:

residentsUser.usercode=yjr&residentsUser.birthday=2015-12-10&residentsUser.sex=0&residentsUser.email=123%40qq.com&residentsUser.name=%E6%9D%A8%E6%99%93%E5%B3%B0&residentsUser.qq=741254&residentsUser.msn=mnd56uytr&residentsUser.userphone=13845263654

如果有中文自动帮我们转码,但是我在测试的时候发现,这个中文自动帮我们转码其实没多大作用,例如:

function updateBaseInfo(){

var parm=$('#JS_basic_info').serialize();

alert(parm);

$.ajax({ 

async:true,

cache:false,

                        data:parm,//此时要注意如果带有中文的参数不能放在这,否则后台无论如何都不会转码成功了,这个我也是醉了,不知道咋弄

dataType:"text",

type:"post",

url: "${rootPath}/updateBaseInfo.htm?"+parm, 参数只能放在这在后台可以使用方法二进行转码

success: function(data){

alert(data);

}

});

}

猜你喜欢

转载自747017186.iteye.com/blog/2260623