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的主要内容,如果未能解决你的问题,请参考以下文章