请求参数丢失加号

Sno*_*irl 17 html javascript java url escaping

我正在编辑搜索表单并尝试防止数据库中的特殊字符.在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>
Run Code Online (Sandbox Code Playgroud)

当表单提交时,页面动态生成URL,该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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在数据库中有一个测试条目,其描述如下:

AAA`~!@#$%^&*()_ + - = {} | [] \:";'<>?,./哇这有很多特殊字符.

使用上面的代码,由于某种原因,当请求到达控制器时,描述失去了+符号(它变成了一个空格).

有谁知道可能会发生什么以及如何解决它?我不确定它是否与URL的特殊用途有关,或者是什么.我可以编辑如何填充描述列表(可能在那里转义).如果您提供此建议,请使用Java特定代码(没有Apache escape utils类等).

如果有帮助,在JavaScript中使用警报表示在发送请求之前+符号未被转换.

rid*_*rid 40

+表示URL中的"空格".替换为%2B.例如,你可以在作曲后做到这一点descriptionsUrlAddition.

descriptionsUrlAddition = descriptionsUrlAddition.replace("+", "%2B");
Run Code Online (Sandbox Code Playgroud)