JSTL标签会自动转义HTML吗?

时间:2013-12-18 18:58:38

标签: java jstl

在JSTL中有一个表达式,例如

<c:out value="${user.firstName}"/>将转义user.firstName中包含的任何HTML。

但是,它是否适用于所有JSTL标签?例如,将是一个像

这样的表达式
href="<c:url value="/users/">
<c:param name="firstName" value="${user.firstName}"/>
</c:url>"

还逃脱HTML?

1 个答案:

答案 0 :(得分:5)

不,除了<c:out>之外没有任何标记可以转义XML。例如:<fmt:message>不会逃避XML。这允许在资源包中放置HTML标记或转义序列。

<c:param>对参数值进行url编码。但是将两个<c:param>放在一个<c:url>中会生成一个未转义的&someUrl?foo=bar&baz=zim。要正确转义此&,请将URL存储在变量中,并使用<c:out>或fn:escapeXml来转义变量:

<c:url var="someUrl" var="theUnescapedUrl">
    <c:param name="foo" value="bar"/>
    <c:param name="baz" value="zim"/>
</c:url>
<a href="<c:out value='${theUnescapedUrl}'/>">click here</a>

<a href="${fn:escapeXml(theUnescapedUrl)}">click here</a>