博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
encodeURIComponent编码时为什么要编码两次
阅读量:6036 次
发布时间:2019-06-20

本文共 1257 字,大约阅读时间需要 4 分钟。

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-

转载于:https://www.cnblogs.com/menggirl23/p/10438371.html

你可能感兴趣的文章
MySQL管理与优化(14):SQL优化
查看>>
★商场上的十则寓言故事!
查看>>
沙盒单机网站代表-Steam【推荐】
查看>>
Mac OS 批量删除.svn文件夹
查看>>
SDWebImageDecoder
查看>>
iOS 开发之设置UIButton的title
查看>>
ROCKETMQ——事务消息发送、消费示例
查看>>
oracle 锁表
查看>>
wordpress功能集成(四)改变评论框样式
查看>>
linux 下 C 编程和make的方法 ( 九、malloc 和free的使用 上)
查看>>
远程桌面发生身份验证错误,要求的函数不受支持
查看>>
Python---学习中遇到的错误
查看>>
Openldap NFS autofs configuration
查看>>
【工具使用系列】关于 MATLAB 符号运算,你需要知道的事
查看>>
java 快速排序
查看>>
hibernate id 生成策略
查看>>
百度开源高性能RPC框架 sofa-pbrpc
查看>>
js 同步代码 让程序暂停
查看>>
Linux下拷贝文件夹并过滤不想要的文件或目录
查看>>
php ffmpeg 推流库 --ffmpeg-push
查看>>