编码的作用
保护原义字符以免其被解释为特殊的定界符,比如
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 中包含的 : / ? & =
这些关键字不能被编码。