首页 > 使用jqGrid查询IE传到后台的字符串乱码

使用jqGrid查询IE传到后台的字符串乱码

使用jqGrid框架查询时,遇到一个问题,用数字字母可以查询,而汉字在IE下不能查询。传给后台的值乱码了。

$('#roleList').jqGrid('setGridParam', {
            url : 'role/queryRoles?roleName=' + roleName+'&t='+new Date(),
            page : 1
        }).trigger('reloadGrid');

url编码格式是采用ASCII码,不是Unicode编码,在URL目录下不能包含中文,IE下好像是默认是使用UTF-8发送请求。中文发送还是中文,在解码是乱码。在发送前用encodeURIComponent进行转码

roleName = encodeURIComponent(roleName);
        postData.roleName = roleName;
        $('#roleList').jqGrid('setGridParam', {
            url : 'role/queryRoles?roleName=' + roleName+'&t='+new Date(),
            page : 1
        }).trigger('reloadGrid');
        这是jqGrid里面的一个问题,url适合放地址,带有中文字符的话就要转码。可以如下。不需要转码
  
    $('#roleList').jqGrid('setGridParam', {
        url : 'role/queryRoles',
         postData: {
            roleName: $('#roleName').val(),
            roleType:2,
        }
        page : 1
    }).trigger('reloadGrid');
        

参数是汉字在IE下乱码?应该是汉字不管什么浏览器都乱码吧。你设置一下后端的request的编码方式试试。


get方式提交的参数会跟在请求行中的uri后边,服务器按照默认的iso-8859-1进行解码,这时候解决乱码有两种办法:

办法一:修改服务器端对uri参数的默认编码
在tomcat的server.xml中,设置<Connector ….>元素的属性URIEncoding="UTF-8”即可。(默认没有设置此属性)

办法二:逆向操作
参数从浏览器到服务器,经过客户端utf-8编码,服务器端iso-8859-1解码,最终成为乱码。那我们将乱码进行相反的编解码,即可得到正常的参数值。
例如:String name = request.getParameter("name”);//得到乱码
name = new String(name.getBytes("iso-8859-1"),"utf-8”);//得到正常的name值

【热门文章】
【热门文章】