前端开发细节-2

来源:互联网 发布:dating付费软件靠谱吗 编辑:程序博客网 时间:2024/03/28 18:18

一、JAVA 中URL链接中文参数乱码的处理方法:

1、如果使用tomcat作为服务器,那么修改tomcat配置文件conf/server.xml中,在  <Connector port="8082" protocol="HTTP/1.1"  中加入  URIEncoding="utf-8"的编码集

2、前台需要对中文参数进行编码,调用js方法encodeURI(url),将url编码,然后请求。

后台接受时,需处理String str =new String(request.getParameter("param").getBytes("iso8859-1"),"UTF-8");

原因:tomcat不设置编码时,默认是iso8859-1,即tomcat默认会以iso8859-1编码接收get参数。 以上操作是将参数以iso8859-1编码转化为字节数组,然后再以UTF-8将字节数组转化为字符串。另外需注意在框架的使用中:request.setCharacterEncoding(encoding);只对post请求有效。而且,spring的CharacterEncodingFilter也只是做了request(和response).setCharacterEncoding(encoding);的操作。所以spring的filter配置不作用于get参数接收。

(1) JS中,在URL参数中确保用UTF-8编码,用js函数encodeURI()编码,例如

    url:"xx.action?id="+treeNode.id+"&name="+encodeURI(newname),

(2) 在java的action中,

import javax.servlet.http.HttpServletRequest; 

HttpServletRequest request = ServletActionContext.getRequest();

request.setCharacterEncoding("UTF-8");

//java 传递流是通过iso-8859-1编码传递的,因此需要先用该方式解码,再用utf-8解码

String name = new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8");//用request获取URL传递的中文参数



3、解决get请求,后台接受中文参数乱码处理的方法(搜索功能带参数)

          (1)前台获取数据,在js中进行编码处理

 

encodeURI函数采用utf-8进行编码,而在服务器的进行解码时候,默认都不是以uft-8进行解码,所以就会出现乱码。

两次encodeURI,第一次编码得到的是UTF-8形式的URL,第二次编码得到的依然是UTF-8形式的URL,但是在效果上相当于首先进行了一 次UTF-8编码(此时已经全部转换为ASCII字符),再进行了一次iso-8859-1编码,因为对英文字符来说UTF-8编码和ISO- 8859-1编码的效果相同。

 (2)后台解码处理

后台接收参数时候,首先通过request.getParameter()自动进行第一次解码(可能是 gb2312,gbk,utf-8,iso-8859-1等字符集,对结果无影响)得到ascii字符,然后再使用UTF-8进行第二次解码,通常使用 java.net.URLDecoder("","UTF-8")方法。

 

两次编码两次解码的过程为:

UTF-8编码->UTF-8(iso-8859-1)编码->iso-8859-1解码->UTF-8解码,编码和解码的过程是对称的,所以不会出现乱码。

二、前端超长参数传递方式(利用form提交数据)

            /*===================下载文件
             * options:{
             * url:'',  //下载地址
             * data:{name:value}, //要发送的数据
             * method:'post'
             * }
             */
            var DownLoadFile = function (options) {
                var config = $.extend(true, { method: 'post' }, options);
                var $iframe = $('<iframe id="down-file-iframe" />');
                var $form = $('<form target="down-file-iframe" method="' + config.method + '" />');
                $form.attr('action', config.url);
                for (var key in config.data) {
                    $form.append('<input type="hidden" name="' + key + '" value="' + config.data[key] + '" />');
                }
                $iframe.append($form);
                $(document.body).append($iframe);
                $form[0].submit();
                $iframe.remove();
            };
            
            DownLoadFile({
                url:this.printMapUrl, //请求的url
                data:{'mapInnerHtml':htmlStr.replace(/\"/g, "'")}//要发送的数据
            });