URLencode编码简析

urlEncode:
<1>·定义:百分号编码(英语:Percent-encoding), 也称作URL编码(英语:URL encoding), 是特定上下文的统一资源定位符 (URL)的编码机制. 实际上也适用于统一资源标志符(URI)的编码。也用于 为"application/x-www-form-urlencoded" MIME准备数据, 因为它用于通过HTTP的请求操作(request)提交HTML表单数据。
<2>·URL含义:URL是为了 统一的命名网络中的一个资源(URL不是单单为了HTTP协议而定义的,而是网络上的所有的协议都可以使用)。所以这就要求URL有一些基本的特性:
1、URL是可移植的。(所有的网络协议都可以使用URL)
2、URL的完整性。(不能丢失数据,比如URL中包含二进制数据时,如何处理)
3、URL的可阅读性。(希望人能阅读)
<3>·使用urlENcode原因:
1、当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的
2、因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符。
3、url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。(主要就是消除服务器解析url时的奇异)
4、实例:
我们都知道Http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值。针对“name1=value1&name2=value2”我们来说一下客户端到服务端的概念上解析过程:
上述字符串在计算机中用ASCII吗表示为: 6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532。 服务端在接收到该数据后就可以遍历该字节流,首先一个字节一个字节的吃,当吃到3D这字节后,服务端就知道前面吃得字节表示一个key,再想后吃,如果遇到26,说明从刚才吃的3D到26子节之间的是上一个key的value,以此类推就可以解析出客户端传过来的参数。现在有这样一个问题,如果我的参数值中就包含=或&这种特殊字符的时候该怎么办。比如说“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么实际在传输过程中就会变成这样“name1=va&lu=e1”。我们的本意是就只有一个键值对,但是服务端会解析成两个键值对,这样就产生了奇异。如何解决上述问题带来的歧义呢?解决的办法就是对参数进行URL编码URL编码只是简单的在特殊字符的各个字节前加上%,例如,我们对上述会产生奇异的字符进行URL编码后结果:“name1=va%26lu%3D”,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。
<4>·编码原理:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
比如:
空格ASCII码是32,对应16进制是20,那么urlencode编码结果是:%20,但在新标准中空格对应的是+
比如:
中 ASCII码是-10544,对应的16进制是FFFFFFFFFFFFD6D0,那么urlencode编码结果是:%D6%D0
部分特殊字符编码:
空格 ! # $ % + @ : = ?
%20 %21 %23 %24 %25 %2B %40 %3A %3D %3F

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,124评论 19 139
  • 乔治一家子D8 依依:妈妈陪我玩爸爸妈妈的游戏%#@#%@&¥$ 我:好的。(当时在和姐姐聊天,于是根本没有听清楚...
    静雨逸桥阅读 1,828评论 0 0
  • 江南好,梅残柳复生。 巾帼何处不扬眉,漫天红袖舞东风。 金陵立新功。
    鼓楼和鱼pandada阅读 3,134评论 0 0
  • 世人都说神仙好,只有金银忘不了! 终朝只恨聚无多,等到多时眼闭了; 世人都说神仙好,只有儿孙忘不了! 痴心父母古来...
    MapleLeaf_叶阅读 12,249评论 0 0
  • { UIScrollView *scoll; UIPageControl *page; UIButton *nb;...
    武小倩阅读 1,346评论 0 0

友情链接更多精彩内容