共计 1169 个字符,预计需要花费 3 分钟才能阅读完成。
一、为什么要 urlencode()?
因为当字符串数据以 url 的形式传递给 web 服务器时, 字符串中是不允许出现空格和特殊字符的。
也就是说,url 的参数传递的时候,需要遵循一定的 url 规范才能正确的传送。
通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如 Size 过大,包含隐私数据,对于 Url 来说,之所以要进行编码,是因为 Url 中有些字符会引起歧义。
大部分需要编码的原因是由于有特殊字符(如 @、#、& 等)或者参数是中文形式。
Url 编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。
二、javascript 中编码的函数
escape() 方法:
(1)采用 ISO Latin 字符集对指定的字符串进行编码。
(2)所有的空格符、标点符号、特殊字符以及其他非 ASCII 字符都将被转化成 %xx 格式的字符编码(xx 等于该字符在字符集表里面的编码的 16 进制数字)。
(3)比如,空格符对应的编码是 %20。
(4)不会被此方法编码的字符:@ * / +
encodeURI() 方法:
(1)把 URI 字符串采用 UTF- 8 编码格式转化成 escape 格式的字符串。
(2)不会被此方法编码的字符:! @ # $& * () = : / ; ? + ‘
encodeURIComponent() 方法:
(1)把 URI 字符串采用 UTF- 8 编码格式转化成 escape 格式的字符串。
(2)与 encodeURI() 相比,这个方法将对更多的字符进行编码,比如 / 等字符。
(3)所以如果字符串里面包含了 URI 的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后 URL 将显示错误。
(4)不会被此方法编码的字符:! * () ‘
重点:
(1)因此,对于中文字符串来说,如果不希望把字符串编码格式转化成 UTF- 8 格式的(比如原页面和目标页面的 charset 是一致的时候),只需要使用 escape。
(2)如果你的页面是 GB2312 或者其他的编码,而接受参数的页面是 UTF- 8 编码的,就要采用 encodeURI 或者 encodeURIComponent。
(3)另外,encodeURI/encodeURIComponent 是在 javascript1.5 之后引进的,escape 则在 javascript1.0 版本就有。
三、php 中关于编码的函数
主要是 urlencode 和 urldecode
其他的参考:https://www.cnblogs.com/xuey/…
四、划重点
url 的编码是为了让一些特殊字符以及中文能够通过编码转换成安全的字符传递,使之符合 url 标准。
大部分的 js 中编码函数多使用 encodeURIComponent,因为该函数是编码范围最大的函数。但是还需要根据业务需求选择不同的编码函数。
五、参考链接
https://www.cnblogs.com/liuho…