我正在从文本区域取值并将它们存储在数据库中以供以后显示。目前的情况是该字符串与数据库中的“\ n”存储在一起。在显示之前,我使用replaceAll方法将所有\ n个字符替换为
。但问题是当我显示它时,<和>字符被转换为<
和>
。在db中存储多行字符串并在网页中显示
什么应该是解决这个问题的正确方法?
comment.replaceAll("\n", "<br>")
我正在从文本区域取值并将它们存储在数据库中以供以后显示。目前的情况是该字符串与数据库中的“\ n”存储在一起。在显示之前,我使用replaceAll方法将所有\ n个字符替换为
。但问题是当我显示它时,<和>字符被转换为<
和>
。在db中存储多行字符串并在网页中显示
什么应该是解决这个问题的正确方法?
comment.replaceAll("\n", "<br>")
您需要在显示过程中禁用转义。目前还不清楚您使用的是哪种视图技术和/或标签卷,但这是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;
来按原样显示换行符。
你一定知道你想要对你的字符串做什么。在页面的HTML部分使用它时,必须转义字符<
,>
和&
(这是您所看到的)。
您看到的效果可能发生是因为:a)您将字符串转义两次或b)在不应该转义的地方使用转义字符串。
您必须调试代码以查看谁在何时转义字符串。
有些代码显示了你如何替换你的代码呢? – Joe 2010-12-09 12:40:44
在未来的问题中,请提及您使用的特定视图技术,taglib和框架。例如。 “我在JSP上使用JSTL”或“我在Facelets上使用JSF”。或者只是适当地标记。只有`java`和'web-development`太广泛了。 – BalusC 2010-12-09 12:45:52