URL带中文参数,后台获取乱码
情况:做分页时,需要带中文参数跳转页面,代码放本地测试没问题,可放到服务器上,点击下一页时就会出现空白,中文参数变成乱码
原因:为防止乱码,本地更改了tomcat\conf\server.xml文件,指定浏览器的编码格式为“简体中文”,可是服务器上并没有更改,所以造成本地没事,放到服务器上就会出现乱码。
解决方式:
第一种: 更改服务器上tomcat\conf\server.xml文件。--适合整个项目
把
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改成
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
第二种: 对URL进行转码,后台解码
jsp页面:
<a id="pageUrl" href="jumpPage.action?name=${pro.name}">跳转页面</a>
<script type="text/javascript">
$("pageUrl").click(function(){
var url = $("#pageUrl").attr("href");
url = encodeURI(encodeURI(url)); -- 转码两次
$("#pageUrl").attr("href",url);
});
</script>
controller页面:
String name = request.getParameter("name"); -- 系统自带转码一次
name = java.net.URLDecode.decode(name, "utf-8"); -- 手动转码一次
用ajax时,中文参数乱码
解决方法:
汉字在前台提交前用encodeURIComponent()函数编一下码,在后台用java.net.URLDecoder.decode(str,"utf-8")解码。 -- 适合字段少时
eg:
前台
var name = $("[name='name']").val();
name = encodeURIComponent(name);
后台
String name = request.getParameter("name");
name = java.net.URLDecoder.decode(name,"utf-8");
我的理解是,encodeURI()是对整个URL编码,encodeURIComponent()是对URL的部分内容编码,范围不同。
http://www.cnblogs.com/shuiyi/p/5277233.html
http://www.cnblogs.com/tylerdonet/p/3483836.html