JS 中 URL 编码的题目.

URL 编码

为何要对 URL 编码

1. 防止剖析毛病

我们的 queryString 的情势是运用 ?最先, key=value 通报参数, key-value pairs 之间运用 & 衔接.
比方:

?postid=5038412&t=1450591802326

服务器会

依据 & 剖析 key-value pairs
依据 = 剖析 key,value

那末假如 key或许 value 中存在 =,&, 那末就会剖析挂掉,
比方 宝洁公司叫做 P&G


?name=P&G&t=123456

服务器剖析的时刻就会剖析毛病:


name=P
G     //到这里就挂掉了

2. 防止不法字符

URL 只能运用 ASCII 字符集, 一切的非 ASCII 码都算是不法字符.
在这个定义中, 一切的中文都算是不法字符.

URL 的编码划定规矩

平常运用的是 百分号编码(percent-encoding)

划定规矩:

是不是是 ASCII 字符
    是
        取对应的字节编号, 比方 'a' 对应的是 '0x61', 那末编码以后就是 %61
    否
        运用 utf-8 对其举行编码
        比方"中文"运用UTF-8字符集获得的字节为 0xE4 0xB8 0xAD 0xE6 0x96 0x87,
        经由Url编码以后获得"%E4%B8%AD%E6%96%87".

现实情形

浏览器会默认给 URL 编码, 然则差别浏览器的编码完成体式格局不一致, 所以最好的体式格局就是:
我们本身经由过程 JS 对 URL 举行编码

JS 用来编码的函数有 3 个:

// escape()  // 不引荐运用, 缘由不明.
encodeURI()
encodeURIComponent()

encodeURI 会对全部 URL 中的不法字符编码 (它是为了处理不法字符)
encodeURIComponent 会对一切的保存字都编码 (处理剖析毛病的题目)

所以终究的编码体式格局是:

  1. 对每个 key-value 举行 encodeURIComponent 编码

  2. 对全部 URL 举行 encodeURI 编码

备注:
URL 中的字符能够分红三类:
保存字符 (reserved characters):
这类字符是URI中的保存症结字符,它们用于支解URI中的各个部份。
这些字符是: ;, /, ?, :, @, &, =, +, $, ,
Mark字符 (mark characters)
这类字符在RFC-2396中迥殊定义,然则没有迥殊申明用处,多是和别的RFC规范相干。
这些字符是:-, _, ., !, ~, *, ‘, (, )
一般字符

URL 编码解码的题目
既然浏览器会默认给 URL 举行编码, 那末服务器就会默认给URL 解码。
假如我们仅仅是对 URL 举行 encodeURI, 那末服务器在解码的时刻能够一般, 然则剖析的时刻照旧不能
辨别 & 究竟是支解符照样 value 中的一个一般字符, 所以我们需要对 key-value pairs 举行编码的.

终究结论
运用 encodeURIComponent 防止参数剖析毛病
运用 encodeURI 防止不法字符

    原文作者:云水摇啊摇
    原文地址: https://segmentfault.com/a/1190000010024438
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞