规定
网络标准RFC 1738做了硬性规定:
"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."
"只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*'(),"[不包括双引号]、以及某些保留字(比如+代表空格),才可以不经过编码直接用于URL。"
在因特网上传送URL,只能采用ASCII字符集。URL编码平时我们是用不到的,因为浏览器会自动将你输入到地址栏的非数字字母转换为url编码。所以对于浏览器来说与jCuckoo的专栏_忙碌的布谷鸟博客是等效的。等到底层进行数据传输时,用的都是ASCII码传递的。
特殊字符
就像前边规定的那样,只有那些字符无需编码(因为它们不代表特殊含义)。但是,对于有特殊含义的字符,就要进行编码。如下:
特殊字符 | 含义 | 十六进制值 |
+ | URL 中+号表示空格 | %2B |
空格 | URL中的空格可以用+号或者编码表示 | %20 |
/ | 分隔目录和子目录 | %2F |
? | 分隔实际的 URL 和参数 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签 | %23 |
& | URL 中指定的参数间的分隔符 | %26 |
= | URL 中指定参数的值 | %3D |
JS编码方法
不编码的字符
方法
字符个数
字符详情
备注 escape 69 */@+-._和0-9a-zA-Z 已被废弃 encodeURI 82 !'()*-._~和#$&+,/:;=?@和0-9a-zA-Z encodeURIComponent 71 !'()*-._~和0-9a-zA-Z
其他网址
关于URL编码 - 阮一峰的网络日志