URL/ajax带中文参数,后台获取乱码

来源:互联网 发布:类中静态变量和常量php 编辑:程序博客网 时间:2024/06/05 20:18

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()与encodeURIComponent()区别
我的理解是,encodeURI()是对整个URL编码,encodeURIComponent()是对URL的部分内容编码,范围不同。
http://www.cnblogs.com/shuiyi/p/5277233.html
http://www.cnblogs.com/tylerdonet/p/3483836.html
0 0
原创粉丝点击