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-

encodeURIComponent编码时为什么要编码两次的更多相关文章

  1. Python文本文件读写操作时的字符编码问题

    说明:文本文件的字符编码问题只存在t模式中,如:open('a.txt', mode='rt') 编码(encode): 我们输入的任何字符想要以文件(如.txt)的形式保存在计算机的硬盘上, 必须先 ...

  2. 解决Gradle编译时出现: 编码GBK的不可映射字符

    解决Gradle编译时出现: 编码GBK的不可映射字符 在build.gradle文件中加入如下内容: [compileJava, compileTestJava]*.options*.encodin ...

  3. hibernate导入大量数据时,为了避免内存中产生大量对象,在编码时注意什么,如何去除?

    Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( i ...

  4. String 字符串中含有 Unicode 编码时,转为UTF-8

    1.单纯的Unicode 转码 String a = "\u53ef\u4ee5\u6ce8\u518c"; a = new String(a.getBytes("UTF ...

  5. [iOS]通过JS调用iOS函数时的URL编码问题

    在前面的文章:[iOS]在WebApp中怎样使用JS调用iOS的函数 中,提到了怎样使用JS通过改动URL调用iOS的内部函数. 当中会遇到一个问题,就是编码问题.比方通过URL调用弹窗,在里面写上内 ...

  6. 使用ffmpeg编码时,如何设置恒定码率,并控制好关键帧I帧间隔

    1. 大家在使用ffmpeg进行视频编码时,使用-b命令,想控制比特率,却发现结果并没有如我们设置所愿,通过码流分析器观察视频码流,码率的波动还是很大的,ffmpeg控制的并不好,这时候,我们可以通过 ...

  7. 如何强制ffmpeg编码时输出一个关键帧

    http://blog.csdn.net/ashlingr/article/details/7829429 如何强制ffmpeg编码时输出一个关键帧   如何强制ffmpeg编码时输出一个关键帧 AV ...

  8. Tomcat在处理POST和GET提交方式时的字符编码问题

    部分内容参考http://yejg1212.blog.163.com/blog/static/3958206120098384327191(原作者:飞翔)  一.POST和GET请求方式的区别: 在默 ...

  9. IDEA编码时卡顿问题

    当代码行数超过2000行,甚至更多时会出现编码时卡顿到无法编译的情况,解决方法如下: 方法1:修改IDEA配置参数 找到D:\ideaIU-2019.1.1.win\bin\idea64.exe.vm ...

随机推荐

  1. 《http权威指南》读书笔记1

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  2. MySql数据保障

    1, 安装文档 配置文件,目录,参数,用户,权限,程序,安装方式 2, 数据备份 强大的备份策略,

  3. Python常用模块time & datetime &random 模块

    时间模块前言 在Python中,与时间处理有关的模块就包括:time,datetime 一.在Python中,通常有这几种方式来表示时间: 时间戳 格式化的时间字符串 元组(struct_time)共 ...

  4. 关于springboot aop 俩次调用的问题 aop多次调用

    由于我在springboot 启动类中 给我的切面类进行了赋值  即@Bean 然而我在切面类中加了@Component 导致 springboot 注入了俩个 bean  所以导致 aop 多次执行 ...

  5. LintCode翻转字符串问题 - python实现

    题目描述:试实现一个函数reverseWords,该函数传入参数是一个字符串,返回值是单词间做逆序调整后的字符串(只做单词顺序的调整即可). 例如:传入参数为"the sky is blue ...

  6. [转]idea导入eclipse的web项目

    https://www.cnblogs.com/xiaoBlog2016/archive/2017/05/08/6825014.html 一.导入自己的web项目 步骤:File->New-&g ...

  7. 高手速成android开源项目【developer篇】

    主要介绍和Android开发工具和测试工具相关的开源项目. Buckfacebook开源的Android编译工具,效率是ant的两倍.主要优点在于:(1) 加快编译速度,通过并行利用多核cpu和跟踪不 ...

  8. dart之旅(一)

    前言 最近在看 dart 了,本着 "纸上得来终觉浅,绝知此事 markdown" 的原则,准备边学边写,写一个系列,这是第一篇.学习过程中主要是参考 A Tour of the ...

  9. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十八):注册中心(Spring Cloud Consul)

    什么是 Consul Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与 ...

  10. springboot aop 自定义注解方式实现完善日志记录(完整源码)

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 一:功能简介 本文主要记录如何使用aop切面的方式来实现日志记录功能. 主要记录的信息有: 操作人,方法名,参数,运行时间,操作类型 ...