2010-12-09 43 views
2

我正在从文本区域取值并将它们存储在数据库中以供以后显示。目前的情况是该字符串与数据库中的“\ n”存储在一起。在显示之前,我使用replaceAll方法将所有\ n个字符替换为
。但问题是当我显示它时,<和>字符被转换为&lt;&gt;在db中存储多行字符串并在网页中显示

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

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

有些代码显示了你如何替换你的代码呢? – Joe 2010-12-09 12:40:44

+0

在未来的问题中,请提及您使用的特定视图技术,taglib和框架。例如。 “我在JSP上使用JSTL”或“我在Facelets上使用JSF”。或者只是适当地标记。只有`java`和'web-development`太广泛了。 – BalusC 2010-12-09 12:45:52

回答

4

您需要在显示过程中禁用转义。目前还不清楚您使用的是哪种视图技术和/或标签卷,但这是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" /> 

但是,请记住XSSattacks的情况下,这些文本是用户控制输入。您可能需要在保存在DB之前清理它,例如Jsoup

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

0

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

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

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

相关问题