URL传递多个参数遇到的bug

Posted 焦大叔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了URL传递多个参数遇到的bug相关的知识,希望对你有一定的参考价值。

bug所在:

  通过URL传递多个参数的时候,其一是中文出现乱码,其二是空格被“%20”替代;

  原因分析:原理暂时还不清楚,后续再研究下原理,只知道有中文的时候就会出现乱码;%20是url空格的编码;

提到编码,就得来简单了解下(周末再详细补充下知识)编码的几种格式:

一:ASCII码,美国标准信息交换码,只有7位.

二:UTF-8:是一种针对Unicode的可变长度字符编码,用1-6个字节 编码Unicode字符.

三:ISO-8859-1,是浏览器默认编码,包含了西方欧洲语言不可缺少的附加字符,它是单字节码,向下兼容ASCII.

  解决办法:传递url的时候通过两次decodeURL编码:encodeURL(encodeURL(url))(为什么要经过两次呢,每次编码到底发生了什么事情呢?第一次encodeURL,按照utf-8获取多字节字符将其一一遍历成单字节字符,第二次encodeURL,进行编码)而在另一个页面中(如:2017-07-03 22:52:10)这种格式的时候,由于有空格,所以就出现了这种结果:2017-07-03%2022:52:10,如何搞呢,这么搞:encodeURL(2017-07-03%2022:52:10)就回来了(2017-07-03 22:52:10)。

查了下资料,这其中涉及到一个知识点:

编码和解码的三种方式:

一:encodeURL(url)/decodeURL(url):主要用于整个URL,不会对本身属于URL的特殊字符进行编码,如 : , / , ? , # 等等,

二:encodeURLComponent()/decodeURLComponent()主要用于URL的某个字段,会对任何非标准字符进行编码,所以平时用的地方比较多

三:escape()/unescape(),只能编码ASCII码,已经废弃,所以不用考虑它啦;

记录开发中的每一个bug,进步从对bug的思考总结开始!

  

以上是关于URL传递多个参数遇到的bug的主要内容,如果未能解决你的问题,请参考以下文章

url编码有个bug,不能直接用decodeURIComponent,如果遇到前面的$会报错。

近期遇到的bug

初学SSM遇到的BUG

ajax遇到的两个小bug

训练时遇到的BERT模型bug

BUG全集(我遇到的)