URL encode 实际上是对 URI 进行 encode的,而不是对 URL。
创新互联建站专注于福田企业网站建设,自适应网站建设,商城网站定制开发。福田网站建设公司,为福田等地区提供建站服务。全流程按需网站策划,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务
什么是 URI?
Uniform Resource Identifier (URI,统一资源标志符) ,是用来标识资源的字符串,规定了以下文法:
上图可见,有效的 URI 至少包含 scheme,: 以及 path(路径),如经典的触发操作系统发邮件动作的mailto 格式[1]:
- mailto:John.Doe@cdxwcx.com
- └─┬──┘ └────┬─────────────┘
- scheme path
其他就是可选的组合路径了,如 scheme://host path ? query # fragment 就会我们常见的 url 格式:
- userinfo host port
- ┌──┴───┐ ┌──────┴──────┐ ┌┴┐
- https://john.doe@www.cdxwcx.com:123/forum/questions/?tag=networking&order=newest#top
- └─┬─┘ └───────────┬──────────────┘└───────┬───────┘ └───────────┬─────────────┘ └┬┘
- scheme authority path query fragment
URI包含URLs and URNs
简单说作用就是:
Reserved Characters(保留字符)
URI 规定了要保留以下字符作特殊使用:
- ! * ' ( ) ; : @ & = + $ , / ? # [ ]
- 来自 RFC 3986 section 2.2 Reserved Characters (January 2005)
如 ? 用来带 url 中的参数,/ 用来分割 url, & 用来拼接 query等,保留字符都有自己的作用。
因此需要传此类字符而不是作特殊字符作用使用时,不能直接放入 url 中,需要编码,也就是 url encode 做的事情。
encode 很简单,把保留字符如 ? 转成 ASCII[2] 的 16 进制表示(? 就是 3F),在前面加一个 % 代表这是转码字符即可,也就是 ? 需要 encode 成 %3F 放在 url 中,所以 url encode 又称作 Percent-encoding。
实际应用
在下述url 中,需要传入跳转 BACK_URL 参数 new_login.com?a=12 时,就需要转移 ? 跟 =g .
https://third_party_login.com?BACK_URL=new_login.com?a=12 就应该转换成
https://third_party_login.com?BACK_URL=new_login.com%3Fa%3D12
这样子后面的 ? 与 = 就不会被处理掉,而能够作为 BACK_URL 这个参数的一部分传给后端。
http 协议中 headers 的 content-type 里常见的的 application/x-www-form-urlencoded,指定请求 body 使用 URL encoded。
鉴于珠玉在前,我就整理下Unicode 和 UTF-8 有什么区别?[3]的内容 ok 了:
简单来说:
详细过程:
unicode 在很长一段时间内无法推广,直到互联网的出现,为解决 unicode 如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,顾名思义,UTF-8 就是每次 8 个位传输数据,而 UTF-16 就是每次 16 个位。UTF-8 就是在互联网上使用最广的一种 unicode 的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用 1~4 个字节表示一个符号,根据不同的符号而变化字节长度,当字符在 ASCII 码的范围时,就用一个字节表示,保留了 ASCII 字符一个字节的编码做为它的一部分,注意的是 unicode 一个中文字符占 2 个字节,而 UTF-8 一个中文字符占 3 个字节)。从 unicode 到 utf-8 并不是直接的对应,而是要过一些算法和规则来转换。
References
[1] mailto 格式: https://www.wikiwand.com/en/Mailto
[2] ASCII: https://www.wikiwand.com/en/American_Standard_Code_for_Information_Interchange
[3] Unicode 和 UTF-8 有什么区别?: https://www.zhihu.com/question/23374078/answer/69732605
本文转载自微信公众号「山尽写东西的cache」,可以通过以下二维码关注。转载本文请联系山尽写东西的cache公众号。
文章名称:面试官竟然敢问我URLEncode及Gbk,Unicode等编码
链接地址:http://www.shufengxianlan.com/qtweb/news27/72927.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联