2011-10-20 50 views
12

我正在編輯搜索表單並試圖防止數據庫中的特殊字符。在JSP搜索表單,一個(多選)下拉列表,用戶可以選擇將在查詢中使用說明(注:說明是字符串列表):請求參數丟失加號

<select id="descriptionSelect" multiple="multiple"> 
    <c:forEach items="${descriptions}" var="description"> 
     <option value="${fn:escapeXml(description)}")}">        
      <c:out value="${description}" /> 
     </option> 
    </c:forEach> 
</select> 

當表單提交,網頁動態生成URL中帶有查詢參數的URL(醜陋,我知道,雙手綁在一起)。這是snipet製作描述部分。

var descriptionSelectBox = document.getElementById("descriptionSelect"); 
var descriptionsUrlAddition = ""; 

for (var i = 0; i < descriptionSelectBox.options.length; i++) { 
    if (descriptionSelectBox.options[i].selected) { 
     descriptionsUrlAddition += "&descriptions=" + escape(descriptionSelectBox.options[i].value); 
    } 
} 

我已經在其說明是數據庫測試條目:

AAA`〜!@#$%^ & *()_ + - = {} | [] \:「;」 <>?,。/而哇,這有很多的特殊字符。

有了上面的代碼,當請求到達控制器某種原因,描述失去+號(它變成只是一個空格)。我可以編輯如何填充描述列表(也許在那裏逃跑),但我不知道它是否與URL的特殊用途或什麼有關。 。如果你提供這個建議,請使用Java特定代碼(沒有Apache escape utils類等)。

如果有幫助,在JavaScript中使用警報表明+符號在se發出請求。

回答

26

+表示URL中的「空格」。將其替換爲%2B。例如,您可以在撰寫descriptionsUrlAddition後執行此操作。

descriptionsUrlAddition = descriptionsUrlAddition.replace('+', '%2B'); 
+0

你將如何實現這個呢? –

+0

@Rachel G.,只需在URL字符串中用'%2B'替換所有的'+'符號。一旦你的URL被組成並且你有它作爲一個字符串,你可以使用''''''replace()'方法。新增示例。 – rid

+0

將你的答案添加到代碼中(escape(descriptionSelectBox.options [i] .value).replace(「+」,「%2B」)),並將其標記爲正確。謝謝=) –

0

您應該在正面使用javascript encodeuri函數來編碼您的參數。