zoukankan      html  css  js  c++  java
  • URL中的保留和不安全字符

    https://blog.csdn.net/wzd2012/article/details/79077248

    *******************************************************************

    书写URL时要使用US-ASCII字符集可以显示的字符。

    http://www.google.com

    如果需要在URL中使用不属于此字符集的字符,就要使用特殊的符号对该字符进行编码。

    如:最常使用的空格用%20来表示,例如:http://www.google.com/new%20123.html

    除了那些无法显示的字符外,还需要在URL中对那些保留(reserved)字符和不安全(unsafe)字符进行编码。

    所谓保留字符就是那些在URL中具有特定意义的字符。不安全字符是指那些在URL中没有特殊含义,但在URL所在的上下文中可能具有特殊意义的字符。例如双引号(“”)

    部分保留字符和不安全字符及其URL编码
    字符 描述 用法 编码
    ; 分号 保留 %3B
    / 斜线 保留 %2F
    ? 问号 保留 %3F
    : 冒号 保留 %3A
    @ “at”符号 保留 %4O
    = 等号 保留 %3D
    & “和”符号 保留 %26
    < 小于号 不安全 %3C
    > 大于号 不安全 %3E
    " 双引号 不安全 %22
    # 井号 不安全 %23
    % 百分号 不安全 %25
    { 左大括号 不安全 %7B
    } 右大括号 不安全 %7D
    | 竖线 不安全 %7C
    反斜线 不安全 %5C
    ^ 加字号 不安全 %5E
    ~ 波浪 不安全 %7E
    [ 左中括号 不安全 %5B
    ] 右中括号 不安全 %5D
    ` 反单引号 不安全 %60
      空格 不安全

    %20

    通常情况下,如果对某个字符能否在URL中使用有疑问,那么你应该始终使用该字符的编码。除字母、数字和字符$-_.+!*'()外的其它所有字符都应该使用编码。

     

    URL编码在ASCII表中的体现

    如何编码?

    众所周知,字符是可由八位字节数(octet)来表示的,八位字节数可用十六进制来表示它的值。如字符“<”的八位字节数十六进制值是3C。在URL中,字符的编码方式为:“%”加上字符的两个十六进制数值。举几个例子:

    • “<”可以被编码为%3C,空格“SP”可被编码为“%20”
    • “田”的GB2312编码十六进制值是CC EF,这时“田”的URL编码为%CC%EF
    • “囧”的GBK编码十六进制值是87 E5,这时“囧”的URL编码为%87%E5
    • “田”的UTF-8编码十六进制值是E7 94 B0,这时“田”的URL编码为%E7%94%B0

    URL中包含汉字时的更多话题

    RFC1738没有规定汉字的编码方式,而是让浏览器自己去决定,因此造成了URL汉字编码的不统一。经过研究,对于URL中的“查询字符串”和“路径”中包含汉字,不同浏览器有不同的处理。

    1. 查询字符串中包含汉字

    在网址输入:http://www.baidu.com/s?wd=田囧 ,敲击回车,使用Fiddler观察浏览器发出的请求(以IE8和Firefox为例):

    查询字符串中含有中文

    IE8将汉字作为GBK编码,直接发往服务器(这其实是不符合RFC规范的);Firefox则多了一次加%的操作。Windows操作系统是GBK编码。得到结论,地址栏直接访问URL,汉字作为查询字符串(Query string)时,IE和Firefox会使用系统编码发至服务器端,Firefox会按规矩编码。

    注意1:不要用Google进行测试,Google的搜索URL(类似:http://www.google.com/#hl=en&source=hp&q=田囧 ),搜索关键词那里不是查询字符串,因为前面有个#……我开始没注意到,被搞迷茫了很久……

    注意2:这只是对URL直接访问的规律。如果页面时从链接点击打开的,例如从A页面含中文的链接打开了B页面,那么浏览器对中文的编码取决于A页面的编码。

    2. URL路径中包含汉字

    在网址直接输入:http://www.hudong.com/wiki/田囧 ,敲击回车,观察请求

    路径中含有中文

    IE8和Firefox都把汉字作为UTF8,按规范进行了URL编码,还好。

     

  • 相关阅读:
    常用排序算法
    多线程基础知识 转
    转 大型项目架构演进过程
    TCP/IP 思维导图
    Java8 List字符串 去重
    docker lnmp php
    jpa 批量插入
    备忘提醒
    IntelliJ IDEA像Eclipse一样打开多个项目(转)
    IntelliJ Idea 常用快捷键列表
  • 原文地址:https://www.cnblogs.com/zhao1949/p/9871042.html
Copyright © 2011-2022 走看看