隨筆-23  評(píng)論-0  文章-5  trackbacks-0

          今天遇到調(diào)用encodeURL調(diào)用二次的疑問(wèn),雖然之前知道要調(diào)用二次,但是具體不是太清楚里面具體的運(yùn)行過(guò)程,這是轉(zhuǎn)載的這個(gè)寫(xiě)的比較詳細(xì),把整個(gè)運(yùn)行過(guò)程詳細(xì)解讀了一下,非常不錯(cuò)所以轉(zhuǎn)載過(guò)了供其他人分享。
          .encodeURL函數(shù)主要是來(lái)對(duì)URI來(lái)做轉(zhuǎn)碼,它默認(rèn)是采用的UTF-8的編碼.

          . UTF-8編碼的格式:一個(gè)漢字來(lái)三個(gè)字節(jié)構(gòu)成,每一個(gè)字節(jié)會(huì)轉(zhuǎn)換成16進(jìn)制的編碼,同時(shí)添加上%號(hào).

          假設(shè)頁(yè)面端輸入的中文是一個(gè)“中”,按照下面步驟進(jìn)行解碼

          1.第一次encodeURI,按照utf-8方式獲取字節(jié)數(shù)組變成[-28,-72-83],對(duì)字節(jié)碼數(shù)組進(jìn)行遍歷,把每個(gè)字節(jié)轉(zhuǎn)化成對(duì)應(yīng)的16進(jìn)制數(shù),這樣就變成了[E4,B8,AD],最后變成[%E4,%B8,%AD]  此時(shí)已經(jīng)沒(méi)有了多字節(jié)字符,全部是單字節(jié)字符。

          2、第二次encodeURI,進(jìn)行編碼,會(huì)把%看成一個(gè)轉(zhuǎn)義字符,并不編碼%以后字符,會(huì)把%編碼成%25.把數(shù)組最后變成[%25E4,%25B8,%25AD]然后就把處理后的數(shù)據(jù)[%25E4,%25B8,%25AD]發(fā)往服務(wù)器端,
          當(dāng)應(yīng)用服務(wù)器調(diào)用getParameter方法,getParameter方法會(huì)去向應(yīng)用服務(wù)器請(qǐng)求參數(shù)
          應(yīng)用服務(wù)器最初獲得的就是發(fā)送來(lái)的
          [%25E4,%25B8,%25AD],應(yīng)用服務(wù)器會(huì)對(duì)這個(gè)數(shù)據(jù)進(jìn)行URLdecode操作,應(yīng)用服務(wù)器進(jìn)行解碼的這一次,不管是按照UTF-8,還是GBK,還是ISO-8859,,都能得到[%E4,%B8,%AD],因?yàn)槎紩?huì)把%25解析成%.并把這個(gè)值返回給getParameter方法

          3\、再用UTF-8解碼一次,就得到"中"了。

          想想看,如果不編碼兩次,當(dāng)服務(wù)器自動(dòng)解碼的時(shí)候,假如是按照ISO-8859去解碼UTF-8編碼的東西,就是會(huì)出現(xiàn)亂碼。

          JS:

          1. document.authorityForm.action = basePath3+"User_viewUser.do?id="+id+"&roleName="+encodeURI(encodeURI(roleName))+"&roleType="+roleType;  


          JAVA后臺(tái):
             

          1. roleName = java.net.URLDecoder.decode(getRequest().getParameter("roleName"),"UTF-8");  
          posted on 2015-08-18 11:20 ForMeBlog 閱讀(432) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JSP基礎(chǔ)類(lèi)
          主站蜘蛛池模板: 顺昌县| 德钦县| 苍山县| 阿图什市| 肥乡县| 清原| 汝南县| 广西| 绥宁县| 盐边县| 阿鲁科尔沁旗| 化隆| 射阳县| 信宜市| 神木县| 阜康市| 沛县| 嘉荫县| 湛江市| 武宣县| 噶尔县| 色达县| 韶山市| 雷州市| 荣成市| 鄂尔多斯市| 四平市| 大荔县| 从化市| 安阳县| 海城市| 出国| 古田县| 兴义市| 朝阳市| 芷江| 惠来县| 页游| 金门县| 罗田县| 盈江县|