我从文本区域获取值并将它们存储在数据库中以供稍后显示。当前场景是字符串在db中以“\ n”存储。在显示之前,我使用replaceAll方法将所有\ n字符替换为
。但问题是当我显示它时,&lt;和&gt;字符转换为<
和>
。
解决这个问题的正确方法应该是什么?
comment.replaceAll("\n", "<br>")
答案 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)您在不应转义的地方使用转义字符串。
您必须调试代码以查看何时转义字符串。