• 招生咨询热线:4008-569-579 
  • 手机版
    用手机扫描二维码直达商品手机版
招生咨询热线
4008-569-579
机构主页 > 机构新闻 > 如何解决网页传值过程中文乱码问题
机构主页 > 机构新闻>如何解决网页传值过程中文乱码问题

如何解决网页传值过程中文乱码问题

来源:北京达内教育        时间:2023-05-26        热度:37℃        返回列表

解决中文乱码问题

网页传值主要有两种情况:

1、使用form表单传值

    使用form表单传值主要有两种方式:get和post(即:method="get/post",默认是get方式)

    1)解决使用post方式传递中文的乱码问题:

        方法一:

        <form action="login-handler.jsp" method="post"></form>

        在接收请求参数之前设置请求编码即可,request.setCharacterEncoding("编码");

        示例:

        <%

            request.setCharacterEncoding("UTF-8");

            String name = request.getParameter("name");

            String pwd = request.getParameter("pwd");

        %>

        方法二:

        可以写一个Filter过滤该项目下的所有请求编码

        web.xml文件

        <filter>

          <filter-name>charsetEncoding</filter-name>

          <filter-class>com.lym.filter.CharsetEncodingFilter</filter-class>

          <init-param>

              <param-name>code</param-name>

              <param-value>UTF-8</param-value>

          </init-param>

       </filter>

       <filter-mapping>

          <filter-name>charsetEncoding</filter-name>

          <url-pattern>/*</url-pattern>

       </filter-mapping>

       CharsetEncodingFilter.java文件

       public class CharsetEncodingFilter implements Filter {

          private static String CODE = "UTF-8";//默认编码

          public void destroy() {}

          public void doFilter(ServletRequest arg0, ServletResponse

arg1,FilterChain arg2) throws IOException, ServletException {

              HttpServletRequest req = (HttpServletRequest)arg0;

              HttpServletResponse resp = (HttpServletResponse)arg1;

              req.setCharacterEncoding(CODE);

              resp.setCharacterEncoding(CODE);

              arg2.doFilter(arg0, arg1);

         }

         public void init(FilterConfig arg0) throws ServletException {

             String code = arg0.getInitParameter("code");

             if(!"".equals(code) && code!= null){

                 CODE = code;

             }

        }

     }     

    2)解决使用get方式传递中文的乱码问题:(两种方法)

        <form action="login-handler.jsp" method="get"></form>

        方法一:

            对接受到的请求参数进行转码,使用String name = new String(name.getBytes("默认编码"),"转换后的编码");

            <%

                String name = request.getParameter("name");

                name = new String(name.getBytes("ISO-8859-1"),"UTF-8");//将接收到的name参数的编码转换为UTF-8编码

            %>

        方法二:

            客户端用户提交数据之前,使用JS把用户要提交的中文值进行编码,然后再服务器端对接收到的值进行解码即可。

            客户端编码:

                <script>

                    function login(){

                        var loginForm = document.forms["loginForm"];

                        loginForm.name.value = encodeURI(loginForm.name.value);//对中文字符串进行编码

                        return true;

                    }

                </script>

                <form action="login-handler.jsp" name="loginForm" method="get"></form>

            服务端解码:

                <%

                    String name = request.getParameter("name");

                    name = URLDecoder.decode(name, "UTF-8");

                %>

                 

        注意:使用encodeURI对字符串进行一次编码,再提交表单时又对字符串进行了一次的编码,实际进行了两次编码。

               在使用URLDecoder.decode()进行解码时,实际上是对字符串进行两次解码。

            

2、使用<a href=""></a>超链接的方式传值

    使用JS对a标签的href属性值进行编码,在对a标签的href属性值编码时,要两次编码才能在服务端使用URLDecoder.decode()进行解码。

    客户端编码:

        <script>

            function a(){

                var doc = document.getElementById("aa");

                doc.href = "a-handler.jsp?info="+encodeURI(encodeURI("你好"));

            }

        </script>

        <a href="" id="aa">使用超链接传送中文参数</a>

    服务端解码:

        <%

            String user = request.getParameter("info");

            user = URLDecoder.decode(user, "UTF-8");

            out.println(user);

        %>

电话咨询

电话咨询

咨询电话:
4008-569-579
回到顶部

回到顶部