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()方式接收參數
