广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 计算机学校 > 惠州计算机学校 > 正文

​网页传值过程中文乱码怎么办?_惠州计算机Java培训

作者:邓华发布时间:2021-02-25分类:惠州计算机学校浏览:762


导读:​网页传值过程中文乱码怎么办?下面惠州北大青鸟学术部老师给大家分析一下这个问题。

网页传值过程中文乱码怎么办?下面惠州北大青鸟学术部老师给大家分析一下这个问题。

网页传值主要有两种情况:
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);
        %>

想知道更多关于Java的资讯,联系在线客服,或者来惠州北大青鸟新方舟校区了解了解。

java5.png

Java


标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


惠州计算机学校排行
标签列表
网站分类
文章归档
最近发表