Html Struts2标签标签不带';t显示UTF-8字符

Html Struts2标签标签不带';t显示UTF-8字符,html,jsp,utf-8,character-encoding,struts2,Html,Jsp,Utf 8,Character Encoding,Struts2,我使用的是Struts 2,我的JSP中有一个label标记,其中包含label和name属性,如下所示 名称属性包含值Maz's组织(来自变量editNom.name),应显示为Maz的组织。当我使用UTF-8编码直接在JSP中使用${editNom.name}时,该值显示良好。然而,在同一个JSP中,当我使用上面的struts标记时,它显示为Maz's组织 有人能建议我如何将UTF-8字符编码应用于struts标记吗 编辑-2017年2月10日: 我找到了根本原因。在

我使用的是Struts 2,我的JSP中有一个label标记,其中包含label和name属性,如下所示


名称属性包含值
Maz's组织
(来自变量
editNom.name
),应显示为
Maz的组织
。当我使用UTF-8编码直接在JSP中使用
${editNom.name}
时,该值显示良好。然而,在同一个JSP中,当我使用上面的struts标记时,它显示为
Maz's组织

有人能建议我如何将UTF-8字符编码应用于struts标记吗

编辑-2017年2月10日:

我找到了根本原因。在chrome中查看我的网页时,我发现在JSP中直接使用变量时的值是

Maz's Organisation
当我在struts标签中使用它时,它将
&
转义到
&因此该值变为

Maz's Organisation
如果我能阻止struts转义
&
,我想这个问题可以解决。我不知道该怎么做。有人能帮我吗?

是一种字符编码<代码>&apos
&
等。。。是特殊字符的转义表示

你误用了UTF-8这个词,因此也误用了UTF-8的概念,因此你在谷歌上做的每一次搜索都把你引向了错误的方向

当您使用JSP EL(
${}
符号)输出文本时,需要转义文本(在.properties文件或数据库中,无论源数据来自何处),但如果您使用Struts标记,如
,甚至JSTL标记,则不需要转义,因为。它按原样工作

但是,在撇号的情况下,您应该将其加倍以使其工作,如

editNom.name=Maz''s Organisation
,否则它将被删除,您将获得输出

Mazs组织

就这样。你只是走错了方向


如果您不想或不能使用
标记,则应使用一些util取消对操作中的数据的转义。

在Struts2中,UI标记将HTML从写入JSP的文本中转义出来。是一个UI标签。所以您不应该关心XSS保护。但是,如果您的初始文本已经转义,那么它将传递到转义
&
两次的标记。因此,您将有无法阅读的内容

您可以尝试使用
StringEscapeUtils
class来取消对HTML的浏览,但它似乎不支持撇号

支持所有已知的HTML4.0实体,包括时髦的口音。请注意 常用的撇号转义字符(&apos;)是 不是法律实体,因此不受支持)

如果您探索
StringEscapeUtils
类,那么您可以找到其他方法来转义字符串。其中之一是

仅支持五个基本XML实体(gt、lt、quot、amp、apos)。 不支持DTD或外部实体


现在,您可以编写一个getter来翻译字符串

public getName() { return StringEscapeUtils.unescapeXml(name); }

JSP使用哪种字符编码?“这个值在使用UTF-8编码的JSP中显示得很好。但是,在同一个JSP中,当我使用上面的struts标记时,它显示为…”呃?你说的“好”是什么意思?用什么@AndreaLigios,当我在JSP中使用
${editNom.name}
时,它的显示效果很好。@RomanC,正如我在评论中提到的,我使用UTF-8。但是您的代码不是UTF-8,对吗?好的。值
Maz&apos;s组织
来自数据库,我无法更改或修改。因此,我必须找到一种方法,在使用in-label标记时不转义该值。当我尝试
时,它显示
Maz&;载脂蛋白;s组织
,但是当我使用
时,它正确显示为
Maz的组织
。有没有一种方法可以禁用标签标签中的转义?没有,请在操作中使用属性标签或取消转义,并使用一些utilthank。如果您可以删除上面答案中的properties file语句并包含此注释,我可以将其标记为答案,以便帮助像我这样的其他人。我使用property tag作为标签,效果很好。现在我在textfield标记中遇到了相同的问题:(因为转义数据库中的数据的选择首先是错误的。如果一个字段有5个字符的限制,我输入
&&&&
,会怎么样?它将是
&&;&;&;&;&;
,并且会打破该限制。记住,下次数据库将由您负责时,请记住这一点。现在,如果您不能触摸数据,请注意。),您必须在操作中取消转义它,或者使用带有
的纯HTML,而不是文本字段,如
。请记住接受答案,如果有帮助,请向上投票,谢谢