Http网络基础之URLEncode
在web程序中进行url请求时,常会遇到url中含有特殊字符的问题(utf8或gbk),常见的特殊字符有 ?$&*@
等字符,或者是中文。遇到这种情况时,就要对url进行编码,用一种规则替换掉这些特殊字符。
1 什么是URLEncode?为什么要encode?
在web程序中进行url请求时,常会遇到url中含有特殊字符的问题(utf8或gbk),常见的特殊字符有 ?$&*@
等字符,或者是中文。遇到这种情况时,就要对url进行编码,用一种规则替换掉这些特殊字符。这就是URLEncode
。
那么,为什么要做这层encode呢?
原来url在定义时,定义为只支持ASCII字符
,所以url的发送方与接收方都只能处理ASCII字符
。所以当你的url中有非ASCII字符
时就需要编码转换(换一定的规则,这个规则下面会讲),同样的,接收方接受到字符串后,换照同样的规则进行decode,还原此url。
2 URLEncode规则
下面是URLEncode规则的定义:
将字符串中除了
-_.
之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)
注意,一般只将参数进行urlencode,因为原链接基本上是不会有特殊字符的。
特别注意一点就是encode时,可以选择编码类型,可以使用utf或gbk等,这点服务器与客户端一定要统一定义好。
3 实用场景
3.1 url中含特殊字符带来歧义
url中含特殊字符有时会带来歧义,比如下面的例子,参数中含有&
这个字符本意表示是与
这个关系,但因为这个是url的关键字(在url中表示参数的分隔),所以会带来误会。
1 | https://luochenxun.com?user=peter&anne # 这里的参数本来是想说 user = 'peter&anne',但会被浏览器识别为 user='peter', anne=undefine |
对参数urlencode后解决问题
1 | https://luochenxun.com?user%3dpeter%26anne |
3.2 url中含中文
比如下面这个url
1 | https://luochenxun.com?user=川普 |
因为这里包含中文,所以传输时会有编码问题,encode后结果
1 | https://luochenxun.com?user%3d%b4%a8%c6%d5 |