2010-07-29 37 views
3

我想将jsp参数设置为可能包含特殊符号的属性值,然后使用表单GET submit将参数传递给一个servlet控制器。例如,参数为:如何将包含双引号的字符串从jsp传递到servlet通过URL使用get方法

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

我注意到,如果sessionScope.combTerms包含双引号,例如。 location:"LOC1",控制器将只收到searchTerms的值为location:,其中LOC1"消失。我应该怎么做才能确保sessionScope.combTerms中的字符串正确传递到控制器?提前致谢。

回答

3

在填充HTML输入值,始终使用fn:escapeXml()。它不仅可以净化HTML实体的价值,而这些价值可能会使您的HTML受到损害(引用表示属性值的结尾,这就是为什么您的价值的剩余部分已经丢失),但它也可以帮助您节省XSS injectionattack risks,重新显示用户控制的输入。

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

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

无需URLEncode它。网页浏览器已经可以自动完成了。试一试&的值。您会看到网页浏览器会更改它%26。 webbrowser也会关心解析XML实体,以便它们在URL中正确结束。即您在服务器端获得",而不是&#34;

+0

这很美!这种方式实际上是我想到的。一个不错的解决方案。非常感谢Balus!你是个天才。 – Ken 2010-07-29 12:20:26

+0

不客气。 – BalusC 2010-07-29 12:24:59

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

+0

嗨kazanaki,谢谢你的回答。嗯......但我也想使用''显示'sessionScope.combTerms'。编码后,显示不好。所以我想有一种更像在.jsp中解码它的方式来显示目的。还有什么建议吗?谢谢。 – Ken 2010-07-29 09:10:34

+0

在请求中放入了两个属性 - 一个编码和一个未编码的 – Bozho 2010-07-29 10:11:31

+0

啊...很酷..它的工作原理。谢谢kazanaki和Bozho。 – Ken 2010-07-29 10:59:56

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