url编码解码

编码类型

10000/10000

无双工具笑脸点赞反馈 2
无双工具尴尬点赞反馈 0
无双工具哭泣点赞反馈 0

Url编解码

Url(统一资源定位符)是指向网页、网站、文件等Internet上资源的地址。Url编解码是将Url地址进行转义,使其符合网络传输的安全标准,以便正确传输。Url编码将不安全的字符,如空格、&、等,转换为十六进制表示,Url解码将Url地址中的十六进制编码还原成原始字符。

为什么要进行编解码

1、http协议中,参数的传输是"key=value"这种键值对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割,如"name1=value1&name2=value2",服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值。但如果name1的值,由value1变为"va&lu=e1",那么在传输过程中就会变成"name1=va&lu=e1",服务端也会解析成两个键值对,导致奇异产生。

2、Url编码格式采用的是ASCII码而非Unicode格式,这表明Url中不允许包含任何非ASCII字符(比如中文),否则会造成Url解析错误。

哪些字符需要编码

RFC3986文档规定Url只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(! * ' ( ) ; : @ & = + $ , / ? # [ ])。需要编码的字符一般有:

1、ASCII字符集中没有对应的可打印字符
Url中只允许使用可打印字符。ASCII码中的10-7F字节全都表示控制字符,这些字符都不能直接出现在Url中,同时对于80-FF字节(ISO-8859-1),由于已经超出了ACII定义的字节范围,因此也不可以放在Url中。

2、保留字符
Url可以划分成若干个组件,协议、主机、路径等。有一些字符(:/?#[]@)是用作分隔不同组件的。例如:冒号用于分隔协议和主机,/用于分隔主机和路径,?用于分隔路径和查询参数等。
还有一些字符(!$&'()*+,;=)用于在每个组件中起到分隔作用的,如=用于表示查询参数中的键值对,&符号用于分隔查询多个键值对。当组件中的普通数据包含这些特殊字符时,需要对其进行编码。

3、不安全字符
还有一些字符,当他们直接放在Url中的时候,可能会引起解析程序的歧义。这些字符被视为不安全字符。
空格:Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉。
引号以及<>:引号和尖括号通常用于在普通文本中起到分隔Url的作用。
#:通常用于表示书签或者锚点。
%:百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码。
{}|\^[]`~:某一些网关或者传输代理会篡改这些字符。

意见反馈