url中包含中文處理

問題:項目中測試建了一個池名稱爲“山東#青島”,通過url傳遞參數到後臺直接就報錯,原因是#把後面的字符鏈接給截斷了,通過對#轉義後在chrome和firefox瀏覽器可以正常傳遞使用,但是在IE瀏覽器下還是歇菜。雖然創建這樣的名字很不合理,但確實是個bug,特別對於通過用戶配置的參數,中文和轉義字符很容易出現請求的url中。

解決方法:經過驗證,採用 encodeURIComponent()可以完成參數編碼,包括特殊字符串也無需單獨轉義,並且可以保證IE、chrome、firefox下均正常使用。

擴展:url編碼函數主要有三個 escape()、encodeURI()、encodeURIComponent(),其中   
escape(): 採用ISO Latin字符集對指定的字符串進行編碼。所有的空格符、標點符號、特殊字符以及其他非ASCII字符都會轉化成%xx格式的字符編碼(xx代表此字符在字符集表裏編碼的16進制數字)。比如,空格符的對應編碼是%20。不會對ASCII字符和數字進行編碼。不會被此方法編碼的字符:@ * / +,反向編碼函數:unescape()。 
encodeURI():把URI字符串採用UTF-8編碼格式轉化成escape格式的字符串。不會被此方法編碼的字符:! @ # $ & ( ) = : / ; ? + ',反向編碼函數:decodeURI()。       
encodeURIComponent():把URI字符串採用URF-8編碼格式轉化成escape格式的字符串。與encodeURI相比,這個函數會將更多的字符進行編碼,比如"/"等字符。所以如果字符串裏面包含了URI的幾個部分的話,不能用這個來進行編碼。否則“/”字符被編碼後將URL顯示錯誤。不會被此方法編碼的字符:! * ( ),反向編碼函數:decodeURIComponent()。

參考資料:

https://www.cnblogs.com/douJiangYouTiao888/p/6473874.html

https://www.cnblogs.com/huaxingtianxia/p/7125862.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章