我想将jsp参数设置为可能包含特殊符号的属性值,然后使用表单GET
submit将参数传递给servlet控制器。例如,参数为:
<input type="hidden" name="searchTerms" value="${sessionScope.combTerms}"></input>
我注意到sessionScope.combTerms
是否包含双引号,例如。 location:"LOC1"
,控制器只会收到searchTerms
消失的location:
的值LOC1"
。我该怎么做才能确保sessionScope.combTerms
中的任何字符串都正确传递给控制器?提前谢谢。
答案 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中正确结束。即您在服务器端获得"
,而不是"
。
答案 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("\"", """);%> ,and use st instead of str.