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后解决问题

对参数进行urlencode
1
https://luochenxun.com?user%3dpeter%26anne

3.2 url中含中文

比如下面这个url

此url中包含中文,会带来
1
https://luochenxun.com?user=川普

因为这里包含中文,所以传输时会有编码问题,encode后结果

对参数进行urlencode
1
https://luochenxun.com?user%3d%b4%a8%c6%d5