我在oracle数据库中拥有XML数据,并使用servlet类提取并在HTML网页上发布数据。但是在网页上的某个标记值中,它显示为“^~\&|
”,但它应该发布为“^~\&|
”。我怎样才能做到这一点?我的意思是我想将数据库中的xml发布到网页上。请建议。
<div id="payloadMsg${count.index}">${msg.messagePayload}</div> </div>
我使用servlet类从数据库中提取数据然后使用JSP我正在发布数据。数据库中的实际数据包含放大器,因此我希望与网页上的数据发布相同。任何人都可以帮忙吗?
答案 0 :(得分:0)
正如评论中所揭示的那样,本案例中的源数据不正确(?)包含编码实体引用的混合(例如<
,>
)和un - 编码实体(即&
)。找出为什么这种不幸的情况正在发生。
正确的解决方案是修复数据,然后 - 始终 - 执行转义为${fn:escapeXml(theRawData)}
。也就是说,不是将&
替换为&
来模拟正确的编码,而是先修复/取消数据 - 例如从数据库中读取数据,或者通过并更正/更新数据库中的数据 - 然后使用更正的数据。
在这种情况下,&#34;修复&#34;功能可能与将<
替换为<
并将所有>
替换为>
一样简单,因为它们是受影响的&#34;字符。或者,有existing approaches来处理此类实体转换;然而,需要识别此[部分]双重编码的原因,它可能是XML-in-XML使用不当的结果。
${msg.messagePayload}
中的数据在写入HTML输出之前应该是"HTML escaped",但是给定的环境允许这样做。 (XML有点不同,但问题和解决方法是&#34;足够接近&#34;在这里。)
正在呈现为&
&
的数据中&
的问题是 &
的{{3}}。因此,需要将数据作为&amp;
写入HTML流。 (<
和有时>
等字符也存在类似的情况,这就是为什么总是完成转义的原因!)
答案 1 :(得分:0)
在转发前设置${msg.messagePayload}
值的控制器中,执行:
msg.messagePayload = msg.messagePayload.replaceAll("&", "&amp;");
或
msg.messagePayload = msg.messagePayload.replaceAll("&", "&amp;");
无论哪种方式都有效。