前段html通过js拼接url?name=XXX&gender=XXX,然后调用jQuery的ajax,往后台传参数,前端alert参数是正常的,后端的参数是乱码,怎么办?
name参数,“中国”变成了“ä¸å›½”
原因:
从http请求报文的角度分析原因:
1因为是get请求所导致(什么是get请求?即将参数放在url?name=XXX&type=XXX的后面),这样浏览器是不会对参数进行UrlEncode编码的。
如果是post请求(form表单中的值、jQuery的ajax的data参数,都是post请求),则参数不会出现这个问题,因为浏览器会对所有参数(仅仅对参数进行编码,其他的都不变,包括?前面的,=前面的)进行UrlEncode编码。
UrlEncode编码前:
如http://127.0.0.1:8080/testProject/test/getSearchResult?name=Tom&gender=男
UrlEncode编码后:
http://127.0.0.1:8080/testProject/test/getSearchResult?name=Tom&gender=%E7%94%B7
(?前面的,=前面的都不编码,英文也保持原样,不编码)
2一般的研发框架,如spring mvc、struts、jfinal等,都会提供获取参数的方法如this.getPara("Name"),这些方法其实否是框架封装过的,是经过UrlEncode解码的。
既然发现了问题,那么就在前段,通过js即jQuery对中文参数人工进行UrlEncode编码不就行了,仅仅需要一段代码。
然而结果还是不行,我改变了一种传参的方式,即将get方式,换成post方式,瞬间就行了。所以,最好不用、最好绝对不用get方式,要用post方式。