一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情。
一、对URI进行编码的原因
- 平时在使用浏览器的过程中,能看到很多URI中含有大量的百分号和十六进制的编码,这是由于在URI中可能会出现有歧义的字符,为了标准能够正确的被解析,因此要对URI进行编码
- 例如在下图中的第一个URI中,要查询的关键词是
?#!,但这三个字符是URI中的保留字符 - 第二个URI中的关键词是中文,但URI中不能接收中文
- 第三个URI中的关键词有
'>,在很多代理器中,这种编码方式是有问题的,会直接将这个结果截断 - 如果对以上三种情况不进行编码,在进行URI解析时就会有问题,因此要对URI中可能产生歧义的数据进行编码
可能产生歧义性的数据如下:
- 不在ASCII码范围内的字符(如中文)
- ASCII中不可显示的字符
- URI中规定的保留字符
- 不安全字符(传输环节中可能会被不正确处理),如空格、引号、尖括号等
二、保留字符与非保留字符
- 保留字符:如冒号、问号、#号等
- 非保留字符:如
-号、.号、_号、~号等
三、URI百分号编码
- 百分号编码方式
- 非ASCII码字符(例如中文):建议先UTR8编码,再US-ASCII编码
- 对于URI合法字符,编码与不编码是等价的