url请求参数乱码问题

在url中参数有中文字符使用post进行查询数据,但是下载却没有任何数据。

所以怀疑下载是get请求,中文字符传入成了乱码导致的,虽然在web.xml里已经配置过了字符集编码。

<!-- UTF编码过滤 -->
  <filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

但是get请求的参数还是有问题。具体原因可以参考https://blog.youkuaiyun.com/u014201499/article/details/71553707

但是奇怪的是,在有些环境是可以下载支持中文参数的。想想可能是tomcat的容器配置不一样。

为了保证get数据采用UTF8编码,在server.xml中进行了如下设置

    <Connector port="8989" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" 
               URIEncoding="UTF-8"/

项目中下载按钮的js事件函数:

 

downLoadClick: function (e, at, o) {

            var params = $.extend(searchOption.aelFilterOption,{});
            params.reqPageIndex=0;//防止受分页影响
            if(aelType==3){
                params.handleUser=$("#ims-user").text();
                delete params.windowId;
            }
            var exportAlertToExcel = urlFilter.getUrl('exportAlertToExcel');
            var form = $('<form>');
            form.attr('style', 'display:none');
            form.attr('target', '');
            form.attr('method', 'post');
            form.attr('action', exportAlertToExcel);
            $('body').append(form);
            for(var key in params){
                var input=document.createElement("input");
                input.name=key;
                input.value=params[key];
                form.append(input);
            }
            form.submit().remove();
        },

这样提交用的POST请求。可奇怪的是,在查询时使用POST请求,参数有中文值是没有问题的,而这里的下载中文会是乱码,导致下载结果不正确。

不知道是不是ajax的POST请求和form的POST提交请求有什么区别。

form表单POST请求中文在后台乱码问题可以这样解决参看https://blog.youkuaiyun.com/qq_32040767/article/details/72966030

accept-charset="GBK" 谷歌等浏览器不在乱码了,但是IE还在乱码 继续加 
onsubmit="document.charset='GBK';" 即可解决。

修改后的代码(这样的代码还是有问题,依然解决不了):

downLoadClick: function (e, at, o) {

            var params = $.extend(searchOption.aelFilterOption,{});
            params.reqPageIndex=0;//防止受分页影响
            if(aelType==3){
                params.handleUser=$("#ims-user").text();
                delete params.windowId;
            }
            var exportAlertToExcel = urlFilter.getUrl('exportAlertToExcel');
            var form = $('<form accept-charset="UTF-8" onsubmit="document.charset=\'UTF-8\'">');
            form.attr('style', 'display:none');
            form.attr('target', '');
            form.attr('method', 'post');
            form.attr('action', exportAlertToExcel);
            $('body').append(form);
            for(var key in params){
                var input=document.createElement("input");
                input.name=key;
                input.value=params[key];
                form.append(input);
            }
            form.submit().remove();
        },

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值