如果你自己实现HTTP协议,那么你如何做到协议中的&能和参数内容中&区分呢? HTTP协议设计的时候早就想到了,答案就是URL编码。
URL编码
在因特网上传送URL,只能采用[url=http://www.w3schools.com/cn/tags/ref_ascii.asp]ASCII字符集[/url]
。
但由于URL常常包含ASCII字符集以外的字符,所以我们必须对URL进行转换。URL编码要做的,就是将URL转换为有效的ASCII字符格式。
在进行URL编码时,每一个非安全的ASCII字符都被替换为“%hh”格式,其中hh为两位十六进制数,它对应于该字符在ISO-8859-1字符集里的编码值。
URL字符串里不能含有空格,在进行URL编码时,空格全部被替换为加号(+)。
python可以通过urllib.urlencode来进行url编码
values ={'name' : '1 &'}
urllib.urlencode(values)
输出:'name=1+%26'
ASCII字符 URL编码
空格 %20
! %21
" %22
# %23
$ %24
% %25
& %26
' %27
( %28
) %29
* %2A
+ %2B
, %2C
- %2D
. %2E
/ %2F
URL编码
在因特网上传送URL,只能采用[url=http://www.w3schools.com/cn/tags/ref_ascii.asp]ASCII字符集[/url]
。
但由于URL常常包含ASCII字符集以外的字符,所以我们必须对URL进行转换。URL编码要做的,就是将URL转换为有效的ASCII字符格式。
在进行URL编码时,每一个非安全的ASCII字符都被替换为“%hh”格式,其中hh为两位十六进制数,它对应于该字符在ISO-8859-1字符集里的编码值。
URL字符串里不能含有空格,在进行URL编码时,空格全部被替换为加号(+)。
python可以通过urllib.urlencode来进行url编码
values ={'name' : '1 &'}
urllib.urlencode(values)
输出:'name=1+%26'
ASCII字符 URL编码
空格 %20
! %21
" %22
# %23
$ %24
% %25
& %26
' %27
( %28
) %29
* %2A
+ %2B
, %2C
- %2D
. %2E
/ %2F