URL编码规则

ASCII编码

ASCII码实现的是大小写英文字母,阿拉伯数字,及常用的标点符、运算符、控制字符(换行、删除等)和通信字符(文头、确认等)与计算机编码之间的对应。ASCII编码采用单字节(8 Bit)存储,实际数据存储空间是7 Bit,最高位的1 Bit是奇偶校验位。

ASCII编码对于英语国家足够用了,但是却无法表达非英语国家字符到计算机编码之间的映射,如中文汉字、法语字母等。所以,出现了很多非ASCII编码(但大多数都是兼容ASCII码的)。

Latin1编码

Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。Latin1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。

ASCII编码是一个7位的容器,ISO-8859-1编码是一个8位的容器。

因为Latin1编码范围使用了单字节内的所有空间,在支持Latin1编码的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作Latin1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。

URL只能包含以下几类字符

其他的字符再传输过程中是不允许出现的

字符类型 示例
英文字母 A-Za-z
数字 0-9
安全字符 -_.!*()

url中一些有语意但是也需要被转义的字符

这些字符在URL中有特定的意义,如果在其他上下文中使用,则需要编码,例如:

  • :(%3A)协议字符 http://
  • /(%2F)分割字符 http://
  • ?(%3F)参数字符
  • #(%23)锚点字符
  • [(%5B) 数组参数标记
  • ](%5D)数组参数标记
  • &(%26) 参数连接字符
  • =(%3D)参数和值分割字符
  • %(%25) 转义字符(如果真需要这个符号那么也需要转义)

别的字符怎么表示?

一个字节用2个16进制数表示,比如空格用10进制表示的编码是 32,用16进制表示就是20,%20前面的%是url转义标志。

如果一个汉字用怎么表示?如果是UTF-8(urlencoding使用什么彪马方式取决于网页的编码方式),会用三个字节表示一个汉字,比如会被转义成%e4%b8%ad

URL编码前和编码后效果展示

image-20251017170015951

posted on 2018-07-07 21:43  zhangyukun  阅读(11377)  评论(0)    收藏  举报

导航