以iOS编程为例,每当我们从服务器获得到一个链接需要分析链接的组成,或者在捕捉本地网路请求作出响应判断的时候,我们经常需要对URL进行解码和编码。那么为什么要进行解码和编码呢。
比如有一个需求,你需要截取webveiw请求来实现一些操作。那么此时我们就需要从请求到的url中获取一些参数。
url:www.baidu.com?canshu1=zhi1&canshu2=zhi2
我们从url中获取参数值的方法是从=后获取值,针对这个链接,我们从链接中获取参数。有两种情况
1.参数有两个canshi1 canshu2,值分别是zhi1和zhi2
2.参数只有一个canshu1 值为zhi1&canshu2=zhi2
显然造成了歧义
为了避免歧义,我们需要就必须要讲值中的“=”或者“&”等特殊符号用其他符号代替,防止对=后面取值的方式造成影响,这个代替过程就是编码。
以情况2为例子,此处有一个参数canshu1,其值是“zhi1&canshu2=zhi2”,进行URL的utf8编码后得到zhi1%26canshu2%3Dzhi2,将编码后的值放入链接
www.baidu.com?canshu1=zhi1%26canshu2%3Dzhi2
于是拿到编码后链接的人解析,就直接取=后面的值作为canshu1的值,得到值为zhi1%26canshu2%3Dzhi2,然后对“zhi1%26canshu2%3Dzhi2”进行解码(需要用和编码同样的方式,一般有UTF8和gb2312)得到值“zhi1&canshu2=zhi2”,完全正确。
注意:如果值中有%26则也会被转化成%2626也不会造成歧义。