解决URL中参数乱码问题

来源:互联网 发布:解除马赛克的软件 编辑:程序博客网 时间:2024/06/11 10:05

Get提交方式,传递参数乱码
例如:想使用重定向URL,response.sendRedirect(req.getContextPath()+"/index.jsp?info=请您先登录");
这样,在index.jsp中显示info内容时,往往会出现乱码,这是由于tomcat默认采用ISO-8859-1对URL进行编码,而浏览器默认不采用任何编码;另外还有除了字母,数字,以及一些标点符号外,其他字符在URL中传递过程中都是不安全的,可能会被浏览器当作参数的分隔符来解析,因此,对get方式传输中文,应该对中文信息进行编码,使用java.net.URLEncoder.encode("中文","utf-8");  
如下所示:
res.sendRedirect(req.getContextPath()+"/index.jsp?info="+java.net.URLEncoder.encode("请您先登录", "UTF-8")) ;
然后,在index.jsp页面中显示info信息时,应该解析编码:
info = URLDecoder.decode(info,"utf-8") ;
info = new String(info.getBytes("ISO-8859-1"),"utf-8") ;
这样,显示出的info就不是乱码了
另外,可以修改tomcat的默认编码方式,如下所示:(server.xml中)
修改:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443"/>
为:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
然后:
res.sendRedirect(req.getContextPath()+"/index.jsp?info="+java.net.URLEncoder.encode("请您先登录", "UTF-8")) ;
然后,在index.jsp页面中显示info信息时,应该解析编码:
info = URLDecoder.decode(info,"utf-8") ;  即可正常显示了
Tomcat5.0以后,get方式传递参数和post方式传递参数的默认编码方式不同,使用useBodyEncodingForURI="true"将它们的编码方式设置为一致。

原创粉丝点击