编码的作用
保护原义字符以免其被解释为特殊的定界符,比如
URL中的:/?&等保护字符格式以免其被传输媒体使用字符转换时弄乱
JS 函数 escape
将除了 * @ - _ + . / 之外的所有非字母数组字符都替换成 % 后跟两位十六进制数
此特性已废弃
JS 函数 encodeURI
将除了 ~ ! @ # $ & * ( ) = : / , ; ? + ' 之外的所有非字母数组字符都替换成 % 后跟两位十六进制数
JS 函数 encodeURIComponent
将除了 ~ ! * ( ) ' 之外的所有非字母数组字符都替换成 % 后跟两位十六进制数
PHP 函数 rawurlencode
将除了 - _ . 之外的所有非字母数字字符都替换成 % 后跟两位十六进制数。这是在 RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱
PHP函数 urlencode
将除了 - _ . 之外的所有非字母数字字符都替换成 % 后跟两位十六进制数,空格则编码为加号 + 。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号 + 方面与 RFC3986 编码不同( RFC 3986 将 空格 编码为 %20)。
使用场景
对 URL 中的参数或值编码
PHP 使用
urlencode。因为要与application/x-www-form-urlencoded的编码方式一样,把 空格 编码为+JS 使用
encodeURIComponent。因为参数或值的字符中如果包含有? & = /需要被编码。另外两个都不满足。
对整个 URL 进行编码
JS 使用 encodeURI 。因为 URL 中包含的 : / ? & = 这些关键字不能被编码。