在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?
答案 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>