我在 Struts 2 标签中将 HTML 标签自动编码为 UTF-8 时遇到一些问题。
我想将一个包含 HTML 标签的值从操作类传递到 JSP 页面,但在 Struts 标签中,该值会自动编码为 UTF-8,并且 HTML 标签无法正确显示。
例如:
我在操作类中有一个名为
String
的 param
变量:
String param=param[0] + "& <br>" + param[1];
这个
param
正在传递到JSP页面并使用Struts标签显示在页面中:
<s:property value="%{param}">
我的问题是,在JSP页面中,
<br>
标签会自动编码并像<br>
一样显示,而不是像HTML标签一样使用它。
有谁知道,我怎样才能跳过这个自动编码过程?
您尝试过(记录)属性
escapeHtml
吗?
<s:property value="%{param}" escapeHtml="false" />
PS:另外两个注意事项:
您正在使用字符
&
,它在 HTML 中很特殊。如果您不打算转义字符串,则 应该将其写为 &
Rowan C 在他的回答中恰当地指出,在网页中使用未转义的 html 可能很危险,特别是如果字符串(在您的情况下为
param
数组)是动态的并且可以由客户端设置。如果您不能信任或无法正确消毒它,那就不要这样做。说真的。
s:property
标签默认转义html代码以防止XSS安全违规。如果您信任使用此标签显示的内容,则可以使用 escape
属性之一来禁用此过程:
Name Required Default Evaluated Type Description
escapeCsv false false false Boolean Whether to escape CSV (useful to escape a value for a column)
escapeHtml false true false Boolean Whether to escape HTML
escapeJavaScript false false false Boolean Whether to escape Javascript
escapeXml false false false Boolean Whether to escape XML
在您的代码中您可以使用
<s:property value="%{param}" escapeHtml="false"/>