当前位置: 首页 > 面试题库 >

请求参数丢失加号

万俟震博
2023-03-14
问题内容

我正在编辑搜索表单,并尝试防止数据库中的特殊字符。在JSP搜索表单中,(多重选择)下拉列表允许用户选择将在查询中使用的描述(注意:description是字符串列表):

<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中使用警报表示发送请求之前,+号未进行转换。


问题答案:

+表示网址中的“空格”。替换为%2B。例如,您可以在撰写后立即执行此操作descriptionsUrlAddition

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


 类似资料:
  • 我有以下问题,当我运行testng套件时,我得到以下错误: “参数'paramName'是@test on method testMethod所必需的,但尚未标记为@OPtional o或已定义”。这里的所有问题都是正确的,这是我试图执行的代码的一部分: 如果此测试是,则扩展自基本测试,该测试在测试之前调用了以下方法 我不包括驱动程序被实例化的情况。如果有人知道会发生什么的话。

  • 可以在模板中直接使用$Request对象,直接输入它的属性或调用它的大部分方法,但只支持方法的第一个参数; // 调用Request对象的get方法 传入参数为id {$Request.get.id} // 调用Request对象的param方法 传入参数为name {$Request.param.name} // 调用Request对象的param方法 传入参数为post.post_title

  • 可以在模板中直接使用$Request对象,直接输入它的属性或调用它的大部分方法,但只支持方法的第一个参数; // 调用Request对象的get方法 传入参数为id {$Request.get.id} // 调用Request对象的param方法 传入参数为name {$Request.param.name} // 调用Request对象的param方法 传入参数为post.post_title

  • 问题内容: 我正在尝试访问Java Servlet过滤器中的两个http请求参数,这里没有新内容,但是很惊讶地发现这些参数已经被消耗了!因此,它在过滤器链中不再可用。 似乎只有在参数进入POST请求正文(例如表单提交)时才会发生这种情况。 有没有办法读取参数而不消耗它们? 问题答案: 顺便说一句,解决此问题的另一种方法是不使用筛选器链,而是使用可以在已解析请求主体上运行的方面来构建自己的拦截器组件