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的思考总结开始!

  

posted @ 2017-07-03 23:18  焦大叔  阅读(1535)  评论(0编辑  收藏  举报