我正在編輯搜索表單並試圖防止數據庫中的特殊字符。在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發出請求。
你將如何實現這個呢? –
@Rachel G.,只需在URL字符串中用'%2B'替換所有的'+'符號。一旦你的URL被組成並且你有它作爲一個字符串,你可以使用''''''replace()'方法。新增示例。 – rid
將你的答案添加到代碼中(escape(descriptionSelectBox.options [i] .value).replace(「+」,「%2B」)),並將其標記爲正確。謝謝=) –