`
jiayanjujyj
  • 浏览: 198452 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

处理URL传递中文乱码问题(续)

阅读更多

为了处理中文乱码部分能够在整个 WEB 系统中都能够使用到,所以将中文乱码处理写成了一个 Filter( 过滤器 ) ,并在 web.xml 中配置所有的请求都将经过这个 Filter 进行过滤。 Filter 部分的代码如下:

 

public class ProFilter implements Filter

{

   

    protected FilterConfig filterConfig ;

    /**

      * 初始化

      */

    public void init(FilterConfig filterConfig) throws ServletException

    {

       this . filterConfig =filterConfig;

    }

   

    private String toUTF(String inStr) throws UnsupportedEncodingException

    {

       String outStr = "" ;

       if (inStr != null )

       {

           //outStr=java.net.URLDecoder.decode(inStr);// 不用 decode , 到这的时候就已经自动 decode 过了

           // 将字符串转为 UTF-8 编码形式

           outStr = new String(inStr.getBytes( "iso-8859-1" ), "UTF-8" );        

       }

       return outStr;

    }  

 

    /**

      * 中文乱码过滤处理

      */

    public void doFilter(ServletRequest svlrequest, ServletResponse svlresponse,

           FilterChain chain) throws IOException, ServletException

    {

       HttpServletRequest request=(HttpServletRequest)svlrequest;

       HttpServletResponse response=(HttpServletResponse)svlresponse;

      

       String method = request.getMethod();

       //1. post 方式提交的请求 , 直接设置编码为 UTF-8

       if (method.equalsIgnoreCase( "post" ))

       {

           try

           {

              request.setCharacterEncoding( "UTF-8" );

           } catch (UnsupportedEncodingException e)

           {

              e.printStackTrace();

           }

       }

       //2. get 方式提交的请求

       else

       {

           // 取出客户提交的参数集

           Enumeration<String> paramNames = request.getParameterNames();

           // 遍历参数集取出每个参数的名称及值

           while (paramNames.hasMoreElements())

           {

              String name = paramNames.nextElement(); // 取出参数名称

              String values[] = request.getParameterValues(name); // 根据参数名称取出其值

              // 如果参数值集不为空

              if (values != null )

              {

                  // 如果参数值集中只有一个值

                  if (values. length == 1)

                  {

                     try

                     {

                         // 调用 toUTF(values[0]) 函数 ,(values[0] 即第一个参数值 ) 方法转换参数值的字元编码                         

                         String vlustr=toUTF(values[0]);

                         // 并将该值以属性的形式藏在 request

                         request.setAttribute(name, vlustr);

                     } catch (UnsupportedEncodingException e)

                     {

                         e.printStackTrace();

                     }

                  }

                  // 如果参数值集中有多个值

                  else

                  {

                     // 遍历参数值集

                     for ( int i=0;i<values. length ;i++)

                     {

                         try

                         {

                            // 回圈依次将每个值调用 toUTF(values[i]) 方法转换参数值的字元编码

                            String vlustr=toUTF(values[i]);

                            values[i] = vlustr;

                         } catch (UnsupportedEncodingException e)

                         {

                            e.printStackTrace();

                         }

                     }

                     // 将该值以属性的形式藏在 request

                     request.setAttribute(name, values);

                  }

              }

           }

 

       }

        // 设置响应方式和支持中文的字元集

       response.setContentType( "text/html;charset=UTF-8" ); 

 

       // 继续执行下一个 filter, 无一下个 filter 则执行请求

       chain.doFilter(request, response);

    }

   

    /**

      * 销毁方法

      */

    public void destroy()

    {

      

    }

}  

过滤器部分,可用来处理页面提交的 post get 方法产生的中文乱码问题。

Post 方式提交的数据( form 表单中提交的数据)只需要进行请求字符编码设置 request.setCharacterEncoding( "UTF-8" ); 和响应设置 response.setContentType( "text/html;charset=UTF-8" ); 设置就可以了。

Get 方式提交的数据会包含在 url 中,(如: leavesp?work= 部门主管审批),则需要取出参数名: Enumeration<String> paramNames = request.getParameterNames(); (如: work )和取出参数值: String values[] = request.getParameterValues(name);( 如:部门主管审批 ), 然后再将参数值进行编码转换: outStr = new String(inStr.getBytes( "iso-8859-1" ), "UTF-8" );

 

过滤器写好这后就需要到 web.xml < web-app > </ web-app > 之间进行配置了, web.xml 中配置如下:

<!-- 配置过滤器 -->

    < filter >

       < description > 处理中文乱码过滤器 </ description >

       < filter-name > ProFilter </ filter-name >

       < filter-class > com.util.filters.ProFilter </ filter-class >

    </ filter >

    < filter-mapping >

       < filter-name > ProFilter </ filter-name >

       < url-pattern > * </ url-pattern ><!-- 过滤所有请求,注: tomcat5 请用 /* -->

    </ filter-mapping >

 

这样配置之后只要页面有任何请求都会通过 ProFilter 进行中文处理了,就不会再发生中文乱码问题了。

 

那一串通过 get 传递过来的中文处理过程如下:

1.        jsp 页面的 JavaScript 里面进行编码处理:

url=encodeURI(‘ leavesp?work= 部门主管审批 ’)

编码后结果: url= leavesp?work=%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9

2.        因为在 web.xml 过滤器配置为 < url-pattern > * </ url-pattern > 所以所有请求将会通过过滤器进行处理,此过滤器处理过程如下:

2.1 获得参数名集合:

Enumeration<String> paramNames = request.getParameterNames();

String name = paramNames.nextElement();

2.1 结果中有 name=’work’ ;一值。

 

2.2 通过参数名获得参数值:

String values[] = request.getParameterValues(name);

work 的值只有一个所以 2.2 的结果为: values[0]=’ é ƒ¨é—¨ä¸»ç®¡å®¡æ‰¹’;( 此处得到的是字符串:“部门主管审批”的 iso-8859-1 编码格式字符 )

 

2.3 获得字符串的 UTF-8 编码格式字符:

outStr = new String(inStr.getBytes( "iso-8859-1" ), "UTF-8" );

2.3 中获得的结果为 outStr= “部门主管审批” .

至此中文已经正常了。

 

不过过滤器还没处理结束,还得将参数名对应的值 ( 已经处理的值 ) 再重新藏到请求中去。

2.4 将参数名对应结果藏入请求中:

request.setAttribute(name, outStr );

通过 2.4 处理后,请求中的 work 的值就变成了:部门主管审批

 

2.5 继续执行下一个 filter, 无一下个 filter 则执行请求

chain.doFilter(request, response);

3.        通过过滤器之后,就可以进入请求中对应 leavesp servlet 了( servlet 就不做说明了),此时在 servlet 中通过 String work=request.getParameter(“work”); 就可以获得 url 中传递过来的中文参数值了,结果为 work=” 部门主管审批

     

分享到:
评论

相关推荐

    教学视频--JSP中URL传递中文乱码问题的解决演示.rar

    然而,在实际操作中,我们时常会遇到一个问题,那就是当JSP页面通过URL传递包含中文字符的参数时,可能会出现乱码现象。这个问题主要源于HTTP协议的特性以及字符编码的处理不当。本教学视频将详细讲解如何解决JSP中...

    asp.net中URL参数传值中文乱码的三种解决办法

    在ASP.NET开发过程中,我们时常会遇到URL参数传递中文字符时出现乱码的问题。这个问题主要源于字符编码不一致导致的,下面将详细讲解三种解决这个问题的方法。 ### 方法一:设置Web.config配置 在ASP.NET应用的`...

    解决JS传递中文乱码问题

    ### 解决JS传递中文乱码问题 在Web开发过程中,我们经常会遇到中文字符编码的问题,尤其是在前后端数据交互时,中文字符的乱码问题更是让人头疼。本文将深入探讨如何解决JavaScript(简称JS)在传递中文字符时出现...

    奇数个中文字符url传递乱码

    为了解决奇数个中文字符URL传递乱码的问题,可以采用JavaScript来实现正确的编码处理。具体步骤如下: 1. **获取原始URL**:首先获取用户输入或系统生成的原始URL。 2. **编码处理**: - 使用`encodeURI()`函数...

    url地址传参中文乱码处理

    URL地址传参中文乱码处理是指在Web应用程序中,将中文参数传递给服务器时,可能出现乱码的情况。这种情况可能是由于编码问题或Tomcat服务器的配置问题引起的。 在处理URL地址传参中文乱码时,通常有三种解决方案: ...

    jquery获取URL中参数解决中文乱码问题的两种方法

    当我们需要在两个页面间通过URL传递参数时,经常会遇到中文乱码问题。这个问题主要是因为URL中的参数可能没有经过正确的编码和解码处理。为了解决这个问题,我们可以采取一些方法,特别是当使用jQuery来获取URL参数...

    extjs 前后台交互参数出现中文乱码问题的解决方法

    ### extjs前后台交互参数出现中文乱码问题的解决方法 #### 问题背景与原因分析 在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的...

    jsp使用URL编码传递中文参数乱码问题

    jsp使用URL编码传递中文参数乱码问题

    Jsp页面在URL中传递参数会出现乱码问题解决

    在Web开发中,尤其是使用Java JSP技术时,我们可能会遇到URL中传递参数出现乱码的问题。这是因为不同的字符集编码方式可能导致字符在传输过程中无法正确解析。本文将详细介绍两种解决JSP页面URL参数乱码的方法,虽然...

    中文乱码处理问题总结

    #### 四、URL传递参数时的乱码处理 1. **问题描述**:通过URL直接传递中文参数时出现乱码。 2. **解决方案**: - 使用过滤器(Filter)在请求处理前设置编码格式。 - 如果已经发生了乱码,可以通过字符串编码转换...

    asp.net页面通过URL参数传值中文乱码问题解决办法

    在Asp.Net开发中,遇到页面通过URL参数传递中文字符时出现乱码是一个常见的问题。这个问题通常是由于字符编码不一致导致的。以下是三种常见的解决方法: 1. **配置Web.config文件**: 在Web.config文件的`...

    解决url中文乱码.doc

    在Java Web开发中,URL中文乱码问题是一个常见的困扰,主要出现在传递含有中文字符的参数时。本案例中,我们将探讨如何解决这个问题,涉及到的主要知识点包括URL编码、字符集转换以及在Java Servlet、JSP和Struts2...

    jsp使用URL编码传递中文参数问题.doc

    在JSP开发中,处理URL编码传递中文参数是常见的需求,尤其是在构建动态网页时。这个问题主要涉及到字符编码的转换,因为不同的编码标准可能导致乱码。以下是对这个主题的详细解释: 1. **URL编码**:URL(统一资源...

    ajax传递中文参数乱码解决办法

    然而,在处理中文等非ASCII字符时,经常会遇到一个令人头疼的问题——中文乱码。本文将详细介绍如何在JavaScript中对中文进行编码,并在Java后端进行解码来解决这一问题。 #### 一、问题背景 在使用AJAX向服务器...

    Ajax中文乱码问题解决方案

    然而,在处理中文字符时,Ajax请求可能会遇到乱码问题,这主要是由于编码格式不一致或者处理不当导致的。本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**...

    Java Http请求传json数据乱码问题的解决

    在实际解决乱码问题的过程中,如果发现使用Base64加密传输中文数据还会出现问题,可以改用URL编码的方式来传输数据,即使用JavaScript的`encodeURI`函数对数据进行两次URL编码,后端接收到后进行一次URL解码即可。...

    JSP-GET-POST传递的乱码问题

    然而,在处理中文参数时,尤其是通过GET和POST方法传递时,经常会出现乱码问题。这通常是由于字符编码不一致或者处理不当导致的。以下是对这一问题的详细解析: 首先,我们需要理解字符编码的基本概念。在Web中,...

    servlet url传递中文参数

    当我们需要通过URL传递参数时,经常会遇到中文参数的问题。这是因为URL本身是基于ASCII编码的,不支持直接传输非ASCII字符,如中文。本篇将详细介绍如何在Servlet中处理URL传递中文参数的情况。 首先,了解URL编码...

    解决qr_code中文乱码问题

    在二维码(QR Code)编码和解码过程中,中文字符可能会出现乱码问题,这通常是由于编码格式不正确或处理方式不当导致的。本教程将详细解释这个问题,并提供一个开源示例帮助你理解和解决中文乱码问题。 首先,我们...

    AJAX技术使用XMLHttpRequest对象传递参数的中文乱码问题

    ### AJAX技术使用XMLHttpRequest对象传递参数的中文乱码问题 #### 背景与问题概述 在使用AJAX技术进行前后端数据交互时,经常会出现中文字符编码的问题,尤其是在使用`XMLHttpRequest`对象发送请求的过程中。例如...

Global site tag (gtag.js) - Google Analytics