2012-06-15 28 views
1

我有一個網址,像這樣localhost:8080/foo.action?param1=7&param2=8&param3=6的HttpServletRequest的getParameter不能與&

當這是URL(因爲它)取得的參數,request.getParmeter("param2")給我8 [正確]

i)在編碼轉換URL以便localhost:8080/foo.action?param1=7%26param2=8%26param3=6

在這種情況下,request.getParameter("param1")給我7&param2=8&param3=6

ii)當編碼轉換URL以便localhost:8080/foo.action?param1=7&param2=8&param3=6

在這種情況下,request.getParameter("param1")給我7request.getParameter("param2")給我空

什麼是檢索參數的正確方法是什麼? [假設使用兩個URL編碼方案之一是不可避免]

(我使用Struts動作)

+0

你應該解碼的URL &應該是& – Subin

+0

在我的struts動作中,我說request.getParameter(「paramName」)。我如何顯式解碼整個Url? –

回答

1

您可以撥打req.getQueryString()得到整個查詢參數,然後無論基於何種編碼方式做服務器端的解碼你選。

+0

雖然我不想這樣做,但我找不到更好的方法。謝謝你的提示。 –

+0

請不要這樣做。相反,不要將&符號編碼,因爲它們應該專門用於允許正確解析。看到alexey28的答案。 – quakkels

0

使用

String[] Parameters = = URLDecoder.decode(Request.getQueryString(), 'UTF-8').splitat('&') ; 

希望這有助於嘗試。

+0

代碼不正確 - 解碼查詢字符串時,可能會得到額外的「&」字符(在URL中編碼)。 –

3

爲了防止這種情況,請不要使用delimeters編碼參數,只編碼參數值。這將是最好的方法。如果你不能處理的參數編碼只是做分析之前在服務器端進行解碼:

String queryString = request.getQueryString(); 
String decoded = URLDecoder.decode(queryString, "UTF-8"); 
String[] pares = decoded.split("&"); 
Map<String, String> parameters = new HashMap<String, String>(); 
for(String pare : pares) { 
    String[] nameAndValue = pare.split("="); 
    parameters.put(nameAndValue[0], nameAndValue[1]); 
} 

// Now you can get your parameter: 
String valueOfParam2 = parameters.get("param2"); 
+1

將鍵和值添加到Map時應該調用URLDecode.decode()。否則,如果查詢字符串包含編碼&字符(如%26),則可能會遇到問題。在這種情況下,decode.split()調用將「生成」不需要的鍵/值對。 – Marcel

+0

是的。正如@Marcel所說,代碼不正確 - 不要使用它。 –

0

我有今天這個發生在我身上。原來,我通過電線傳遞編碼的網址。當提出請求時,應將其作爲http://localhost/foo?bar=1&bat=2而不是http://localhost/foo?bar=1&amp;bat=2

在這種情況下,我已經從xml文件中剪下了url並將其粘貼到瀏覽器中。