【发布时间】:2011-12-12 03:43:18
【问题描述】:
我正在编辑一个搜索表单并试图防止数据库中的特殊字符。在 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 采用 URL 中的查询参数(丑陋,我知道,手被束缚)。这是制作描述部分的片段。
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 转义实用程序类等)。
如果有帮助,在 JavaScript 中使用警报表明 + 号在发送请求之前没有被转换。
【问题讨论】:
标签: java javascript html url escaping