如何正确包含可能包含特殊字符的 href

how to properly enclose an href that may contain special characters

我有以下代码片段

<a href=<c:url value="/admin/main" ><c:param name="key" value="${sessionScope.myvalue}"/></c:url>>Example Link</a>

这可以在不使用 href" 或 href=" 或 href=' 并且 href 周围没有任何东西的情况下工作 - 主要是因为它只是参数。由于 myvalue 可以包含 ' 或 " 添加单引号或双引号会破坏它,因此添加 " 会破坏 link 因为本地附加到 href 之前的 url 的开头,因为所有 links in应用程序是相对的。这是处理这些 links 的最佳方法吗?或者是否有更好的方法来包含完整的 href 而不会破坏功能。如果它不是动态的,我通常会使用双引号 - 看起来那里什么都没有是错误的

您必须 html 对 href 属性中的值进行编码。根据您现有的 <c:url> 标签,您似乎正在使用 JSTL (Java Standard Tag Library),因此您可以使用内置的 escapeXml() 函数。

在您的 jsp 页面顶部添加以下内容:

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

然后你可以这样调用函数:

<c:url var="myUrl" value="/admin/main">
    <c:param name="key" value="${sessionScope.myvalue}"/>
</c:url>

<a href="${fn:escapeXml(myUrl)}">Example Link</a>