美文网首页
urlencode和rawurlencode,傻傻分不清

urlencode和rawurlencode,傻傻分不清

作者: 虞大胆的叽叽喳喳 | 来源:发表于2019-05-09 21:37 被阅读0次

最近半年我写了很多Web方面的文章,看上去很简单,但如果深究下去,则不是那么一回事了,今天聊聊url编码的事情。

很多人对urlencode编码很熟悉,但对rawurlencode却了解不多,其实对于URL编码,rawurlencode才是标准,它定义在 RFC3986 上,这个 RFC 描述了如何定义一个 URL,URL 其实本质上不是 HTTP 协议的一部分,只是 URL 和 HTTP 协议结合的比较紧密,所以总觉得 HTTP 协议包含 URL。

先描述下rawurlencode,它也叫做百分号编码(Percent-encoding),首先思考一个问题,为什么URL需要编码,原因就在于早期的 URL 只有 ASCII 字符,所以无需编码。

但世界上有多种语言,为了让 URL 符合语义标准,必须转码,主要有以下几种字符需要编码:

  • ASCII 控制字符。
  • Non-ASCII,比如中文字符。
  • 保留字符,比如/符号有特殊含义,为了输出原始/符号,必须编码。
  • 不安全字符,这些字符(比如<、\、%)应该可以称为“应用字符”,对应的就是 HTML 中的“实体字符”。

那么具体如何编码呢?

  • 非字母和数字字符替换为%符号,后面跟着字符的十六进制。
  • 破折号、下划线、点号和波浪号无需编码。
  • 空格替换为%20。

接着说说urlencode,它基于rawurlencode标准,但有略微的不同,它定义在rfc1866,这个rfc属于html标准的一部分,编码方式和 application/x-www-form-urlencoded MIME 编码方式一致。

urlencode处理 query string 的编码,而 rawurlencode 被认为处理 url 编码,这可以看做一个区别。

urlencode 和 rawurlencode 在编码方式上有二处区别:

  • 波浪号需要百分号编码。
  • 空格替换为+。

那么为什么不能保持一致呢?可能是历史原因,但 rfc2396 认为 url 中的 + 符号是一个保留字符,所以 rawurlencode 编码方式更标准。

在具体写代码的时候,其实很少接触到 urlencode 编码,因为浏览器,web服务器,代码框架都做了封装,比如 web 服务器会自动urlencode, curl 库也会自动urlencode query string。

那为什么今天提到 rawurlencode 呢,我在使用阿里云和腾讯云API的时候,在对API签名的时候,会对各个 query string 进行 rawurlencode,然后再计算前面,至于为什么不直接使用 urlencode,是我非常好奇的。

类似文章:

扫码_搜索联合传播样式-标准色版.png

相关文章

  • urlencode和rawurlencode,傻傻分不清

    最近半年我写了很多Web方面的文章,看上去很简单,但如果深究下去,则不是那么一回事了,今天聊聊url编码的事情。 ...

  • PHP urlecode urldecode rawurldec

    PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者...

  • urlencode与rawurlencode的区别

  • gen和egen傻傻分不清楚

    ***************************gen和egen傻傻分不清楚****************...

  • 随笔

    喜欢和爱,傻傻分不清。伤害自己伤害了ta

  • Spring 的 BeanFactory 和 FactoryBe

    Spring 的 BeanFactory 和 FactoryBean 傻傻分不清? BeanFacotry是spr...

  • 傻傻分不清

    话题不知如何切入,感情的世界太混乱,不是谁都可以捋得明白的。生活你会遇到你不喜欢的人,可是有一种感情叫相依为命,你...

  • 傻傻分不清

    你在追求聪明我在追求智慧我是你眼中的傻子你是我眼中的瞎子 是傻子瞎?是瞎子傻?是选择吧。

  • 傻傻分不清

    文|胡忠伟|原创首发|关于生活 01 当你决定出发了,甚至已经看清了周围的一切人与事,哪怕这件事情对于自己来说,又...

  • 傻傻分不清

    前天傍晚,小家伙一觉睡醒,在阳台转了一圈,揉揉眼睛,满脸疑惑问他外婆:“婆婆,你说现在是早上还是傍晚啊?” 因为是...

网友评论

      本文标题:urlencode和rawurlencode,傻傻分不清

      本文链接:https://www.haomeiwen.com/subject/gziyoqtx.html