一、为什么要 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,因为该函数是编码范围最大的函数。但是还需要根据业务需求选择不同的编码函数。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。