为什么要对URI进行编码?

传递数据中,如果存在用作分隔符的保留字符应该怎么办?

对可能产生歧义性的数据编码

  • 不在ASCII码范围内的字符  (ASCII等字符编码详解:https://blog.csdn.net/Deft_MKJing/article/details/79460485
  • ASCII码中不可显示的字符
  • URI中规定的保留字符
  • 不安全字符(传输环节中可能会被不正确处理),如空格、引号、尖括号等

如:

https://www.baidu.com/s?wd=?#!

https://www.baidu.com/s?wd=冯小圆    博客

https://www.baidu.com/s?wd=小圆 ‘>博客

保留字符与非保留字符

保留字符:

reserved = gen-delims / sub-delims

  • gen-delims = ":" / "/" / "#" /  "[" / "]" / "@"
  • sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "=" / ";" / ","

非保留字符:

unreserved = APLHA / DIGIT / "-" / "_" / "." / "~"

  • APLHA :%41-%5A and %61-%7A
  • DIGIT:%30-%39
  • -: %2D .:%2E  _:%5F
  • ~: %7E ,某些实现将其认为保留字符

百分号编码方式:

pct-encoded  =  "%" HEXDIG HEXDIG

对于HEXDIG  十六进制中的字母,大小写等价

非ASCII码字符(例如中文):建议先UTF-8编码,再 US-ASCII 编码

对于URI合法的字符,编码和不编码是等价的

例如,"URI转换"既可以是"URI%e8%bd%ac%e6%8d%a",也可以"%55%52%49%e8%bd%ac%e6%8d%a"

猜你喜欢

转载自www.cnblogs.com/fengxiaoyuan/p/10927419.html