在db中存储多行字符串并在网页中显示它们

时间:2010-12-09 12:39:12

标签: java encoding

我从文本区域获取值并将它们存储在数据库中以供稍后显示。当前场景是字符串在db中以“\ n”存储。在显示之前,我使用replaceAll方法将所有\ n字符替换为
。但问题是当我显示它时,<和>字符转换为<>

解决这个问题的正确方法应该是什么?

comment.replaceAll("\n", "<br>")

2 个答案:

答案 0 :(得分:5)

您需要在显示期间禁用转义。目前还不清楚您正在使用哪种视图技术和/或标记库,但这对于JSTL <c:out>和JSF <h:outputText>来说是典型的。它们默认都是predefined HTML/XML entites转义,但有一个额外的属性来禁用转义。

JSTL:

<c:out value="${bean.text}" escapeXml="false" />

JSF:

<h:outputText value="#{bean.text}" escape="false" />

但是,请注意XSS attacks这些文本是用户控制输入的情况。您可以在保存DB之前清除它,例如Jsoup

顺便说一句,您也可以使用CSS replaceAll()代替white-space: pre;而不是按原样显示换行符。

答案 1 :(得分:0)

你必须知道你想对你的字符串做什么。如果您在页面的HTML部分使用它,则必须转义字符<>&(这就是您所看到的)。

您看到的效果可能会发生,因为a)您将字符串转义两次或b)您在不应转义的地方使用转义字符串。

您必须调试代码以查看何时转义字符串。