以iOS編程為例,每當(dāng)我們從服務(wù)器獲得到一個(gè)鏈接需要分析鏈接的組成伞插,或者在捕捉本地網(wǎng)路請求作出響應(yīng)判斷的時(shí)候萨醒,我們經(jīng)常需要對URL進(jìn)行解碼和編碼。那么為什么要進(jìn)行解碼和編碼呢烹卒。
比如有一個(gè)需求,你需要截取webveiw請求來實(shí)現(xiàn)一些操作弯洗。那么此時(shí)我們就需要從請求到的url中獲取一些參數(shù)旅急。
url:www.baidu.com?canshu1=zhi1&canshu2=zhi2
我們從url中獲取參數(shù)值的方法是從=后獲取值,針對這個(gè)鏈接牡整,我們從鏈接中獲取參數(shù)藐吮。有兩種情況
1.參數(shù)有兩個(gè)canshi1 canshu2,值分別是zhi1和zhi2
2.參數(shù)只有一個(gè)canshu1 值為zhi1&canshu2=zhi2
顯然造成了歧義
為了避免歧義,我們需要就必須要講值中的“=”或者“&”等特殊符號用其他符號代替谣辞,防止對=后面取值的方式造成影響迫摔,這個(gè)代替過程就是編碼。
以情況2為例子泥从,此處有一個(gè)參數(shù)canshu1,其值是“zhi1&canshu2=zhi2”句占,進(jìn)行URL的utf8編碼后得到zhi1%26canshu2%3Dzhi2,將編碼后的值放入鏈接
www.baidu.com?canshu1=zhi1%26canshu2%3Dzhi2
于是拿到編碼后鏈接的人解析躯嫉,就直接取=后面的值作為canshu1的值纱烘,得到值為zhi1%26canshu2%3Dzhi2,然后對“zhi1%26canshu2%3Dzhi2”進(jìn)行解碼(需要用和編碼同樣的方式祈餐,一般有UTF8和gb2312)得到值“zhi1&canshu2=zhi2”擂啥,完全正確。
注意:如果值中有%26則也會被轉(zhuǎn)化成%2626也不會造成歧義帆阳。