URL 傳參中需要處理的特殊字符
阿新 • • 發佈:2018-09-13
tor 進行 sharp 字符 表示 light decode class 編程
例如實際請求URL如下:
http://www.douwansha.com/mdeditor?data=[{"address":null,"name":"公司名稱=阿裏巴巴集團","id":"12345","priority":null,"tel":null,"urllink":"1","keytype":null,"errortype":"測試項目","errordesc":"過年咯","submit_user":"loongshawn"}]&dize=1&user=loongshawn
服務器返回結果:
"服務器異常:\r\nnet.sf.json.JSONException: Found starting ‘[‘ but missing ‘]‘ at the end. at character 0 of null
這個異常很明顯是由於URL的data參數中的name屬性內容包含一個特殊字符”=”,導致data解析JSON異常,這個時候比較簡單的方法就是把特殊字符替換掉,接下來看看URL中都有哪些特殊字符。
特殊字符
-
1.+ URL 中+號表示空格 %2B
-
2.空格 URL中的空格可以用+號或者編碼 %20
-
3./ 分隔目錄和子目錄 %2F
-
4.? 分隔實際的 URL 和參數 %3F
-
5.% 指定特殊字符 %25
-
6.# 表示書簽 %23
-
7.& URL 中指定的參數間的分隔符 %26
-
8.= URL 中指定參數的值 %3D
如果傳遞參數中包含上述特殊字符,比較標準的做法是先對參數value進行URLEncoder編碼,然後解析是再利用URLDecoder解碼。
java中URL 的編碼和解碼函數:
-
編碼:java.net.URLEncoder.encode(String s);
-
解碼:java.net.URLDecoder.decode(String s);
可能有時候編程方式並不一定遵循標準的做法(依據實際業務而定),比如並沒有利用URL編碼解碼規範,直接是明文傳輸,這個時候可以僅僅針對參數值中的參數進行過濾處理,比如將特殊字符替換掉等。
如下方法,過濾掉特殊字符,但前提是不影響信息的理解。
public static String getUrlReplacedValue(String value){ String str= value.replace("&", "-") .replace("=", "-") .replace("#", "-") .replace("%", "-") .replace("/", "-") .replace("?", "-"); return str; }
URL 傳參中需要處理的特殊字符