【问题标题】:How to pass a string containing double quotes from a jsp to a servlet through URL using get method如何使用get方法通过URL将包含双引号的字符串从jsp传递到servlet
【发布时间】:2010-07-29 07:54:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: jsp servlets el


    【解决方案1】:

    填充 HTML 输入值时,始终使用fn:escapeXml()。它不仅可以清理 HTML 实体中的值,这些值可能会使您的 HTML 格式错误(引号表示属性值的结尾,这就是您的值的剩余部分丢失的原因),而且还可以将您从 XSS injection attack risks 中解救出来重新显示用户控制输入的地方。

    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    
    <input type="hidden" name="searchTerms" value="${fn:escapeXml(sessionScope.combTerms)}">
    

    不需要URLEncode它。网络浏览器已经自动完成了。在值中使用&amp; 自己尝试一下。您会看到网络浏览器将其更改为%26。网络浏览器还将负责解析 XML 实体,以便它们在 URL 中正确结束。 IE。你在服务器端得到",而不是&amp;#34;

    【讨论】:

    • 这太漂亮了!!这种方式真的是我的想法。一个很好的解决方案。非常感谢巴鲁斯!!你真是个天才。
    【解决方案2】:
    <% String st = str.replaceAll("\"", "&quot;");%> ,and use st instead of str.
    

    【讨论】:

      【解决方案3】:

      您在将值放入表单之前对其进行编码,然后在 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

      【讨论】:

      • 您好 kazanaki,感谢您的回答。嗯...但我也想使用&lt;c:out value="${sessionScope.combTerms}"&gt;&lt;/c:out&gt; 显示sessionScope.combTerms。编码后,显示不好。所以我想有一种更像在.jsp中解码它的方式来显示目的。还有什么建议吗?谢谢。
      • 在请求中放入两个属性——一个编码的,一个未编码的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2019-08-20
      • 2014-02-12
      • 2014-03-10
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      相关资源
      最近更新 更多