如何使用get方法通过URL将包含双引号的字符串从jsp传递到servlet

时间:2010-07-29 07:54:28

标签: jsp servlets el

我想将jsp参数设置为可能包含特殊符号的属性值,然后使用表单GET submit将参数传递给servlet控制器。例如,参数为:

<input type="hidden" name="searchTerms" value="${sessionScope.combTerms}"></input>

我注意到sessionScope.combTerms是否包含双引号,例如。 location:"LOC1",控制器只会收到searchTerms消失的location:的值LOC1"。我该怎么做才能确保sessionScope.combTerms中的任何字符串都正确传递给控制器​​?提前谢谢。

3 个答案:

答案 0 :(得分:3)

填写HTML输入值时,请始终使用fn:escapeXml()。它不仅可以清除HTML实体的价值,这可能会使您的HTML发生错误(引用表示属性值的结尾,这就是您的价值残余丢失的原因),但它也会使您免于XSS injection {{ 3}}在您重新显示用户控制输入的地方。

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

<input type="hidden" name="searchTerms" value="${fn:escapeXml(sessionScope.combTerms)}">

无需URLEncode。 webbrowser已经自动完成了。在值中使用&自己尝试一下。您会看到网络浏览器对其进行了更改%26。 webbrowser还会关注解析XML实体,以便它们在URL中正确结束。即您在服务器端获得",而不是&#34;

答案 1 :(得分:1)

在将值放入表单之前对其进行编码,然后在serlvet中对其进行解码。

(您可能已经在URL参数中将其视为%20)

以下是各自的课程。

http://download-llnw.oracle.com/javase/1.5.0/docs/api/java/net/URLEncoder.html

http://download-llnw.oracle.com/javase/1.5.0/docs/api/java/net/URLDecoder.html

答案 2 :(得分:1)

<% String st = str.replaceAll("\"", "&quot;");%> ,and use st instead of str.