我正在编辑搜索表单并尝试防止数据库中的特殊字符。在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中的查询参数(丑陋,我知道,双手并列)。这是制作描述段的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`~!@#$%^&amp; *()_ + - = {} | [] \:“;'&lt;&gt;?,。/哇这有很多特殊字符。< / p>
使用上面的代码,由于某种原因,当请求到达控制器时,描述会丢失+符号(它只是一个空格)。
有谁知道可能会发生什么以及如何解决它?我不确定它是否与URL的特殊用途有关,或者是什么。我可以编辑如何填充描述列表(可能在那里转义)。如果您提供此建议,请使用Java特定代码(没有Apache escape utils类等)。
如果有帮助,在JavaScript中使用警报表示在发送请求之前+符号未被转换。
答案 0 :(得分:38)
+
表示网址中的“空格”。将其替换为%2B
。例如,您可以在撰写descriptionsUrlAddition
之后立即执行此操作。
descriptionsUrlAddition = descriptionsUrlAddition.replace("+", "%2B");
答案 1 :(得分:0)
你应该在正面使用javascript encodeuri函数来编码你的参数。
答案 2 :(得分:0)
对于javascript,您应该使用encodeURIComponent()或encodeuri()。例如:
var uri = "fj74cvg+fd1==ee";
var res = encodeURIComponent(uri);
和res将被编码为"fj74cvg%2Bfd1%3D%3Dee"
对于php,您可以使用urlencode()。例如:
<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
这些函数将替换字符串中用作URL一部分的任何特殊字符。