解決url中特殊字符截斷參數的問題


url轉義字符

1. +  URL 中+號表示空格 %2B 
2. 空格 URL中的空格可以用+號或者編碼 %20 
3. /  分隔目錄和子目錄 %2F  
4. ?  分隔實際的 URL 和參數 %3F  
5. % 指定特殊字符 %25  
6. # 表示書簽 %23  
7. & URL 中指定的參數間的分隔符 %26  
8. = URL 中指定參數的值 %3D

 

在js中可用encodeURL(), encodeURIComponent()進行編碼

具體使用:

如果要將某個文本框中的值進行編碼請使用encodeURIComponent(),如果要將整個url編碼請使用encodeURL();

encodeURL()不會對這些字符進行編碼:   ! @ # $& * ( ) = : / ; ? + '

encodeURIComponent()不會對這些字符轉碼:   ! * ( ) '

而在文本框中用戶有可能輸入&號,因此必須對其編碼,所以對於url傳遞的參數的參數值必須使用encodeURIComponent()方式編碼。

如果要對整個url進行編碼

e.g

url:  http://localhost/user/list.html?name=xxx&age=13

因為在url中&表示多個參數之間的分隔符,需要保留,且/表示多個目錄的分隔符也需要保留因此,對於整個url進行編碼就必須使用encodeURL()方式

 

 

Java中:

由於使用request.getParameter()來獲取參數時已經對編碼進行了一次解碼,因此無需再次使用URLDecoder.decode(“中文”, "UTF-8");來進行解碼,如果你一定要在java端進行一次URLDecoder.decode(“中文”, "UTF-8")解碼,那么js端必須進行兩次編碼即:encodeURIComponent(encodeURIComponent("中文"));因為如果不在js端進行兩次編碼,那么在java端通過URLDecoder.decode(“中文”, "UTF-8")方式解碼會產生亂碼。

推薦的做法是:

在js端:將參數值通過encodeURIComponent()編碼,然后將整個url使用encodeURL()方式編碼。另外一邊進行decodeURIComponent()解碼;

在java端: 直接通過request.getParameter()方式接收參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM