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

 我来答
北大青鸟志远科技
2023-04-11 · 用心创作内容,感谢您的关注。
北大青鸟志远科技
向TA提问
展开全部
解决中文乱码问题
网页传值主要有两种情况:
1、使用form表单传值
  使用form表单传值主要有两种方式:get和post(即:method="get/post",默认是get方式)
  1)解决使用post方式传递中文的乱码问题:
      方法一:
      <formaction="login-handler.jsp"method="post"></form>
      在接收请求参数之前设置请求编码即可,request.setCharacterEncoding("编码");
      示例:
      <%
        request.setCharacterEncoding("UTF-8");
        Stringname=request.getParameter("name");
        Stringpwd=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文件
    publicclassCharsetEncodingFilterimplementsFilter{
      privatestaticStringCODE="UTF-8";//默认编码
      publicvoiddestroy(){}
      publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{
          HttpServletRequestreq=(HttpServletRequest)arg0;
          HttpServletResponseresp=(HttpServletResponse)arg1;
          req.setCharacterEncoding(CODE);
          resp.setCharacterEncoding(CODE);
          arg2.doFilter(arg0,arg1);
      }
      publicvoidinit(FilterConfigarg0)throwsServletException{
        Stringcode=arg0.getInitParameter("code");
        if(!"".equals(code)&&code!=null){
            CODE=code;
        }
      }
    }    
  2)解决使用get方式传递中文的乱码问题:(两种方法)
      <formaction="login-handler.jsp"method="get"></form>
      方法一:
        对接受到的请求参数进行转码,使用Stringname=newString(name.getBytes("默认编码"),"转换后的编码");
        <%
          Stringname=request.getParameter("name");
          name=newString(name.getBytes("ISO-8859-1"),"UTF-8");//将接收到的name参数的编码转换为UTF-8编码
        %>
      方法二:
        客户端用户提交数据之前,使用JS把用户要提交的中文值进行编码,然后再服务器端对接收到的值进行解码即可。
        客户端编码:
          <script>
              functionlogin(){
                varloginForm=document.forms["loginForm"];
                loginForm.name.value=encodeURI(loginForm.name.value);//对中文字符串进行编码
                returntrue;
              }
          </script>
          <formaction="login-handler.jsp"name="loginForm"method="get"></form>
        服务端解码:
          <%
              Stringname=request.getParameter("name");
              name=URLDecoder.decode(name,"UTF-8");
          %>
            
      注意:使用encodeURI对字符串进行一次编码,再提交表单时又对字符串进行了一次的编码,实际进行了两次编码。
          在使用URLDecoder.decode()进行解码时,实际上是对字符串进行两次解码。
        
2、使用<ahref=""></a>超链接的方式传值
  使用JS对a标签的href属性值进行编码,在对a标签的href属性值编码时,要两次编码才能在服务端使用URLDecoder.decode()进行解码。
  客户端编码:
      <script>
        functiona(){
          vardoc=document.getElementById("aa");
          doc.href="a-handler.jsp?info="+encodeURI(encodeURI("你好"));
        }
      </script>
      <ahref=""id="aa">使用超链接传送中文参数</a>
  服务端解码:
      <%
        Stringuser=request.getParameter("info");
        user=URLDecoder.decode(user,"UTF-8");
        out.println(user);
      %>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式