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")) 就可以得到想提交的参数的原值。