如何在JSP / JSTL中对URL进行编码?

22

你为什么要在JSP上做这个?难道不能在servlet上使用 UrlEncoder.encode() 把数据传递到JSP吗? - Deepak Bala
3个回答

40

如果您正在使用JSP,我建议使用JSTL而不是使用脚本片段。您可以使用JSTL标签<c:url /><c:param />组合使用:

<c:url value="/yourClient" var="url">
  <c:param name="yourParamName" value="http://google.com/index.html" />
</c:url>

<a href="${url}">Link to your client</a>

这将导致:

<a href="/yourClient?yourParamName=http%3a%2f%2fgoogle.com%2findex.html">Link to your client</a>

我该如何传递一个空的参数值?我尝试过 <c:param name="DocType" value=""/>,但结果是 DocType%3d=。我只需要 DocType= - Mohammad Faisal
我的表达式失败了,因为它包含一个单引号。(Poppo's Taqueria - Outpost)如何通过转义而不是替换来解决? - GeekySelene
单引号不需要进行URL编码。 - Jasper de Vries

5
使用UrlEncoder.encode()方法是正确的选择。但需要注意的是,该方法并不能进行百分号编码。建议使用以下方法:
java.net.UrlEncoder.encode(stringOfURL,"UTF-8").replace("+","%20")

2
应该使用 java.net.URLEncoder 而不是 java.net.UrlEncoder。 - Matiaan

1

被接受的答案缺少一些JSP代码才能有效,应该是:

<c:url value="/yourClient" var="url">
  <c:param name="yourParamName" value="http://google.com/index.html" />
</c:url>

<a href="<c:out value='${url}'/>">Link to your client</a>

正如一条评论所指出的,另一个选项是使用JavaScript的encodeURIComponent方法。

3
${url} 和 <c:out value="${url}"> 在这种情况下是相同的。 - algiogia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接