如何防止JSTL c:out将数字字符引用替换为单字节字符



您好,感谢您阅读我的文章。

我正在使用Tomcat7开发一个Java动态Web项目。

我的问题是"c:out"如何在JSP中呈现数字字符引用。

在"web.xml"中,我有以下"上下文参数":

<context-param>
  <param-name>S_IF_MSG_USER_INFO_MY_ACCOUNT_4</param-name>
  <param-value>d&#233;marrer un nouveau ticket,</param-value>
</context-param>

在JSP"foo.JSP"中,我有以下"c:out":

<c:out value="${initParam['S_IF_MSG_USER_INFO_MY_ACCOUNT_4']}"></c:out>

如果我在浏览器中请求JSP"foo.JSP"并查看结果页面的源代码,则字符串d&#233;marrer un nouveau ticket,已被démarrer un nouveau ticket,替换这意味着数字字符参考CCD_ 3已被字符CCD_。

我不希望发生这种事。特别是,因为如果Web浏览器字符编码被手动更改(默认为UTF8)为"Western ISO-8859-1",我会得到两个字节(0xC3 0xA9)而不是é。这确实是可以预测的,但这正是我试图通过使用数字字符引用来避免的。

我能做什么?我哪里搞混了?顺致敬意,

编辑1

我也尝试过不使用"c:out":

CCD_ 5。

不幸的是,它还将&#233;转换为é

我在项目中添加了一个方法escapeCharactersWithAnAccute()

此方法将字符串作为输入,并返回包含此集合中字符的字符串http://www.sagehill.net/livedtd/xhtml1-transitional/xhtml-lat1.ent.html替换为其数字字符引用。

然后,在JSP中,如果我写下面这样的东西,我会得到预期的结果:

<c:out escapeXml="false" value="${isd_fun:escapeCharactersWithAnAccute(initParam['S_IF_MSG_USER_INFO_MY_ACCOUNT_4'])}"></c:out>

最新更新