zoukankan      html  css  js  c++  java
  • encodeURIComponent编码时为什么要编码两次

    Why 要对url进行编码

      当使用地址栏提交查询参数时,如果不编码,非英文字符会按照操作系统的字符集进行编码提交到服务器,服务器会按照配置的字符集进行解码,所以如果两者不一致就会导致乱码。

     

    Why encodeURIComponent / encodeURI编码时要编码两次 ?

      encodeURI使用的是 UTF-8 编码规则来编的,当服务器接收url的参数后会自动解码一次,但自动解码的字符集不一定是UTF-8,

      字符集不一致时解码会出现乱码。

     

    下边会详细介绍一次和两次编码的情况

    一次encodeURIComponent编码的情况:

       前端代码:

    var encodeUrl = encodeURIComponent("http://www.test.com/s?state=1&paramName=张三");

      后端代码:

    String paramValue = request.getParameter(paramName);

      用getParameter接收后,Tomact会自动解码,

      如果Tomact接收请求的编码格式是UTF-8的话,解码后没有问题;

      如果不是UTF-8的话就会出现乱码

      

    两次encodeURIComponent编码的情况:

      前端代码:

    var Url = encodeURIComponent("http://www.test.com/s?state=1&paramName=张三");
    var Url2 = encodeURIComponent(encodeUrl);

      后端代码:

    String name1 = request.getParameter(paramName);
    String name2 = java.net.URLDecoder.decode(name1,"UTF-8"); 
      Url是将中文编码成ASCII码后的URL;
      Url2是将ASCII码编码后的URL,由于用GBK、UTF-8、ISO-8859-1对ASCII码编码的结果是相同的,
      所以request.getParameter("name")解码的时候,不管是按 GBK 还是 UTF-8 还是 ISO-8859-1 都好,都能够正确的得到URL。

     补充如何设置Tomcat接收请求的编码格式:

        可以利用request.setCharacterEncoding("UTF-8");来设置Tomcat接收请求的编码格式,

          但是只对POST方式提交的数据有效,对GET方式提交的数据无效!

          要设置GET的编码,可以修改server.xml文件中,相应的端口的Connector的属性:URIEncoding="UTF-8",这样,GET方式提交的数据才会被正确解码。如下图:

    
    

        


     

      -THE END-

  • 相关阅读:
    JfreeChart折线图 CSDN-李鹏飞
    [2012山东省第三届ACM大学生程序设计竞赛]——Mine Number
    两个对象值同样(x.equals(y) == true),但却可有不同的hash code,这句话对不正确?
    EBS TimeZone问题
    json数据转化成实体 存到数据库.
    写给大一大二大三还在迷惘中的学生
    Xamarin中Unsupported major.minor version 52.0问题解决
    解决Xamarin Android SDK Manager闪退问题
    Xamarin Forms启动自带模拟器缓慢
    Xamarin Android SDK无法更新的解决办法
  • 原文地址:https://www.cnblogs.com/menggirl23/p/10438371.html
Copyright © 2011-2022 走看看