如何使用特殊字符“百分比”对URL进行编码?

时间:2012-01-03 13:45:36

标签: java jsp url encoding

我正在尝试在jsp中使用encodeURL方法来编码带有“%”符号的网址。

response.encodeURL(/page1/page2/view.jsp?name=Population of 91% in this place)

只要单击该按钮,就会显示"The website cannot display the page"错误。

但是当您手动将"%"符号更改为此"%25"Population of 91%25 in this place时,会显示正确的页面。

此外,只要最后放置"%"符号,就像这个“In this place Population of 91%”一样,页面就会正确显示,但我注意到在地址栏中它仍然显示为"%"和不是"%25"而是仍在工作。

当我四处搜索时,它只提到使用encodeURI() & encodeURIComponent().

等其他方法

即使有encodeURL符号,您是否可以在使用"%"方法正确显示页面的同时向我建议解决方案。我应该使用replace()或为什么encodeURL()方法无法正常工作?

4 个答案:

答案 0 :(得分:1)

考虑使用URLEncoderURLDecoder

答案 1 :(得分:1)

HttpServletResponse#encodeURL()方法实际上有一个误导性的名称。阅读javadoc以了解它的确实作用(必要时附加jsessionid)。另请参阅In the context of Java Servlet what is the difference between URL Rewriting and Forwarding?以了解JSP / Servlet世界中的ambiguties。

在servlet方面,您需要URLEncoder#encode()代替:

String url = "/page1/page2/view.jsp?name=" + URLEncoder.encode("Population of 91% in this place", "UTF-8");
// ...

但是,在JSP方面,您需要使用JSTL <c:url>标记(avoid Java code in JSP!):

<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...

<c:url var="url" value="/page1/page2/view.jsp">
  <c:param name="name" value="Population of 91% in this place" />
</c:url>

<a href="${url}">link</a>

<form action="${url}">
  <input type="submit" value="button" />
</form>

答案 2 :(得分:1)

您的代码的结果是:

%2Fpage1%2Fpage2%2Fview.jsp%3Fname%3DPopulation%20of%2091%25%20in%20this%20place

您应该只编码查询字符串值。

... = "/page1/page2/view.jsp?name=" + URLEncoder.encode('Population of 91% in this place');

答案 3 :(得分:0)

在您的示例中,您可以使用c:urlc:param代码:

<c:url value="/page1/page2/view.jsp">
    <c:param name="name" value="Population of 91% in this place" />
</c:url>

特别是,c:param标记会对value属性进行url编码。我刚遇到一种情况,我需要生成一个带有查询字符串的URL,该查询字符串包含以井号开头的值。如果没有url-encoding,则浏览器会将井号解释为锚点部分的开头。我添加了c:param标记,并对井号进行了编码,允许在跟踪链接时出现预期的行为。