最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決URL地址中的中文亂碼問題的辦法

 更新時間:2017年02月10日 14:44:01   作者:bladestone  
這篇文章主要介紹了解決URL地址中的中文亂碼問題的辦法的相關(guān)資料,需要的朋友可以參考下

解決URL地址中的中文亂碼問題的辦法

引言: 在Restful類的服務(wù)設(shè)計中,經(jīng)常會碰到需要在URL地址中使用中文作為的參數(shù)的情況,這種情況下,一般都需要正確的設(shè)置和編碼中文字符信息。亂碼問題就此產(chǎn)生了,該如何解決呢?且聽本文詳細(xì)道來。

1.  問題的引出

   在Restful的服務(wù)設(shè)計中,查詢某些信息的時候,一般的URL地址設(shè)計為: get /basic/service? keyword=歷史 , 之類的URL地址。 但是,在實際的開發(fā)和使用中,確是有亂碼情況的發(fā)生,在后臺的讀取keyword信息為亂碼,無法正確讀取。

2. 亂碼是如何產(chǎn)生的?

   由于我們利用URL傳遞參數(shù)這種方式是依賴與瀏覽器環(huán)境中的,也就是說URL及URL中包含的各個key=value格式的傳遞參數(shù)鍵值對參數(shù)是在瀏覽器地址欄中的處理原理處理相應(yīng)編碼后傳遞至后臺進(jìn)行解碼的。

  由于我們沒有進(jìn)行任何處理,此時javascript請求URL并傳參數(shù)存在中文時(也就是說輸入框中輸入中文時),對URL的中文參數(shù)進(jìn)行編碼是按照瀏覽器機(jī)制進(jìn)行編碼的。此時編碼存在亂碼問題。

3. 初次編碼, javascript中利用encodeURI()方法進(jìn)行編碼。

   利用encodeURI()在javascript中對中文URL參數(shù)進(jìn)行編碼時,“測試”二字會被轉(zhuǎn)換為“%E6%B5%8B%E8%AF%95”。 但是問題依然存在。原因是在編碼后的字符串信息,瀏覽器機(jī)制會認(rèn)為“%”是一個轉(zhuǎn)義字符,瀏覽器會把地址欄URL中的傳遞的已轉(zhuǎn)換參數(shù)“%”與“%”之間的已轉(zhuǎn)義字符進(jìn)行處理傳遞到后臺中。這樣會造成與實際經(jīng)過encodeURI()編碼后的URL不符,因為瀏覽器誤認(rèn)為“%”是轉(zhuǎn)義字符字符了,它并未將“%”認(rèn)為是個普通字符。

4. 二次編碼,使用encodeURI

   操作:

encodeURI(encodeURI("/order?name=" + name));

   處理后的URL不在是通過一次 encodeURI()轉(zhuǎn)換后的字符串”%E6%B5%8B%E8%AF%95“,而是經(jīng)過上一步兩層encodeURI()處理URL處理后的字符串”%25E6%B255%258B%25E8%AF%2595“,通過再次編碼原有被瀏覽起解析為轉(zhuǎn)義字符的”%“被再次編碼,轉(zhuǎn)換成了普通字符轉(zhuǎn)”%25“。 

     此時前端javascript代碼對帶有中文的URL編碼已經(jīng)完成,并通過URL傳遞參數(shù)的方式傳遞到后臺等待處理,Action獲取到正常轉(zhuǎn)換切無亂碼的參數(shù)為”%25E6%B255%258B%25E8%AF%2595“,此字符串對應(yīng)的中文正是我們輸入的”測試“二字。

5. 后臺如何正確解析中文字符信息?

  進(jìn)入后臺的信息,在經(jīng)過二次encodeURI()之后,直接讀取是無法后去正確的信息的。 需要繼續(xù)如下處理:

URLDecoder.decode("chinese string","UTF-8") 

      URLDecoder的decode(String str,String ecn)方法有兩個參數(shù),第一個參數(shù)為待解碼的字符串,第二個參數(shù)為解碼時的對應(yīng)編碼。

6.   encodeURI, encodeURIComponent, escape

    6.1  escape()函數(shù)

    escape() 函數(shù)可對字符串進(jìn)行編碼,這樣就可以在所有的計算機(jī)上讀取該字符串。

   返回值:已編碼的 string 的副本。其中某些字符被替換成了十六進(jìn)制的轉(zhuǎn)義序列。

   說明 :該方法不會對 ASCII 字母和數(shù)字進(jìn)行編碼,也不會對下面這些 ASCII 標(biāo)點符號進(jìn)行編碼: - _ . ! ~ * ' ( ) 。其他所有的字符都會被轉(zhuǎn)義序列替換。所有的空格符、標(biāo)點符號、特殊字符以及其他非ASCII字符都將被轉(zhuǎn)化成%xx格式的字符編碼(xx等于該字符在字符集表里面的編碼的16進(jìn)制數(shù)字)。比如,空格符對應(yīng)的編碼是%20。不會被此方法編碼的字符: @ * / +

  6.2 encodeURI() 方法

把URI字符串采用UTF-8編碼格式轉(zhuǎn)化成escape格式的字符串。不會被此方法編碼的字符:! @ # $& * ( ) = : / ; ? + '

 6.3  encodeURIComponent() 方法

    把URI字符串采用UTF-8編碼格式轉(zhuǎn)化成escape格式的字符串。與encodeURI()相比,這個方法將對更多的字符進(jìn)行編碼,比如 / 等字符。所以如果字符串里面包含了URI的幾個部分的話,不能用這個方法來進(jìn)行編碼,否則 / 字符被編碼之后URL將顯示錯誤。

不會被此方法編碼的字符:! * ( ) '

    因此,對于中文字符串來說,如果不希望把字符串編碼格式轉(zhuǎn)化成UTF-8格式的(比如原頁面和目標(biāo)頁面的charset是一致的時候),只需要使用escape。如果你的頁面是GB2312或者其他的編碼,而接受參數(shù)的頁面是UTF-8編碼的,就要采用encodeURI或者encodeURIComponent。

7. 另一種處理URL的中文亂碼方案

    請求端的中字符有encodeURI進(jìn)行一次轉(zhuǎn)碼,如:

   var url="/ajax?name="+encodeURI(name);

   服務(wù)器端代碼:

  name=new String(name.getBytes("iso8859-1"),"UTF-8");

注: name為獲得的字符串,iso8859-1為項目的默認(rèn)字符編碼,如果為中文編碼gbk,gb2312等則不用這一步進(jìn)行處理.

  分析: 經(jīng)過程序驗證,結(jié)果可行的。 由此可知,瀏覽器本身默認(rèn)的編碼方式是iso8859-1的方式,即使使用了encodeURI進(jìn)行了utf-8編碼處理,主要的字符串內(nèi)容,比如ascii字符和可見字符都還是基于iso8859-1瀏覽器自身的字符。原因就是這些字符在編碼上和UTF-8字符串是重合的。而encodeURI之類的轉(zhuǎn)義函數(shù)主要解決,特殊字符%,/之類的字符的轉(zhuǎn)義問題。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • js漢字轉(zhuǎn)拼音實現(xiàn)代碼

    js漢字轉(zhuǎn)拼音實現(xiàn)代碼

    漢字轉(zhuǎn)拼音,比較娛樂的一款應(yīng)用,感興趣的朋友可以了解下,或許對你學(xué)習(xí)js有所幫助
    2013-02-02
  • 匹配html標(biāo)記的正則

    匹配html標(biāo)記的正則

    匹配html標(biāo)記的正則...
    2006-07-07
  • JS作用域深度解析

    JS作用域深度解析

    這篇文章主要為大家詳細(xì)介紹了JS作用域,剖析JS的作用域問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • chrome監(jiān)聽cookie變化與賦值問題

    chrome監(jiān)聽cookie變化與賦值問題

    這篇文章主要介紹了chrome監(jiān)聽cookie變化與賦值問題,cookie監(jiān)聽與賦值操作需要manifest文件里聲明權(quán)限問題,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • 詳解Chai.js斷言庫API中文文檔

    詳解Chai.js斷言庫API中文文檔

    這篇文章主要介紹了詳解Chai.js斷言庫API中文文檔,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 簡單的漸變輪播插件

    簡單的漸變輪播插件

    本文主要介紹了簡單的漸變輪播插件,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 很不錯的兩款Bootstrap Icon圖標(biāo)選擇組件

    很不錯的兩款Bootstrap Icon圖標(biāo)選擇組件

    這篇文章主要介紹了不容錯過的兩款Bootstrap Icon圖標(biāo)選擇組件,支持自定義的圖標(biāo),拿出來分享下,絕對的干貨,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JS的遞增/遞減運(yùn)算符和帶操作的賦值運(yùn)算符的等價式

    JS的遞增/遞減運(yùn)算符和帶操作的賦值運(yùn)算符的等價式

    JS的遞增/遞減運(yùn)算符和帶操作的賦值運(yùn)算符的等價式...
    2007-12-12
  • UniApp表單校驗兩種方式對比詳解

    UniApp表單校驗兩種方式對比詳解

    本文對比了UniApp中表單校驗的命令式和聲明式兩種方式,通過實戰(zhàn)示例展示了它們的優(yōu)缺點,并有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2025-03-03
  • layui動態(tài)表頭的實現(xiàn)代碼

    layui動態(tài)表頭的實現(xiàn)代碼

    這篇文章主要介紹了layui動態(tài)表頭的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論

乌鲁木齐县| 大城县| 龙州县| 新昌县| 湛江市| 恩平市| 博爱县| 卫辉市| 铜陵市| 枝江市| 上犹县| 济南市| 公安县| 安远县| 天长市| 阜南县| 丰台区| 尼玛县| 理塘县| 来安县| 葵青区| 辉县市| 环江| 汾西县| 科技| 西林县| 乡宁县| 百色市| 兴隆县| 桂阳县| 准格尔旗| 金沙县| 和林格尔县| 友谊县| 临潭县| 石城县| 北海市| 曲麻莱县| 洪雅县| 酉阳| 绍兴县|