HTML 标签在 Struts2 标签中自动从文本编码为 UTF-8

HTML tag auto encoding from text to UTF-8 in Struts2 tags

我在 Struts2 标签中将文本自动编码为 UTF-8 时遇到一些问题。

我想将一个值 包含一个 HTML 标记从操作 class 传递到 JSP 页面,但是在 Struts 标记中这个值是自动编码为 UTF-8,HTML 标签显示不正确。

例如: 我在 class

中有一个名为 param 的字符串变量
String param=param[0] + "& <br>" + param[1];

而这个 param 是传入 JSP 页面并使用 Struts 标签显示在页面中:

<s:property value="%{param}">

我的问题是,在 JSP 页面中,<br> 标签自动编码并像 &ltbr&gt 一样显示,而不是像 HTML 标签一样使用它。

有谁知道我该如何跳过这个自动编码过程?

您是否尝试过 (documented) 属性 escapeHtml

<s:property value="%{param}" escapeHtml="false" />

PS: 两个补充说明:

  1. 您使用的字符 & 在 HTML 中很特殊。如果你不打算转义字符串,你 should write it as &amp;

  2. 正如 Rowan C 在他的回答中恰当地指出的那样,在网页中使用未转义的 html 可能很危险,尤其是如果字符串(在您的情况下是 param 数组) 是动态的,可以由客户端设置。如果您不能信任或无法正确清理它,那么就不要那样做。说真的。

s:property tag 默认转义 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"/>