我正在从文本区域获取值并将它们存储在数据库中以供以后显示。当前情况是字符串在数据库中存储为“\n”。在显示之前,我使用 replaceAll 方法将所有\n 字符替换为
。但问题是当我显示它时,< 和 > 字符被转换为 <
和 >
。
解决这个问题的正确方法应该是什么?
comment.replaceAll("\n", "<br>")
最佳答案
您需要在显示期间禁用转义。目前还不清楚您使用的是什么 View 技术和/或标签库,但这对于 JSTL 是典型的 <c:out>
和 JSF <h:outputText>
.它们都默认转义 predefined HTML/XML entites , 但有一个额外的属性来禁用转义。
联合实验室:
<c:out value="${bean.text}" escapeXml="false" />
JSF:
<h:outputText value="#{bean.text}" escape="false" />
但是,保留XSS attacks请记住这些文本是用户控制的输入的情况。您可能需要在保存到数据库之前清理它,例如 Jsoup .
顺便说一句,而不是replaceAll()
你也可以只使用 CSS white-space: pre;
按原样显示换行符。
关于java - 在数据库中存储多行字符串并在网页中显示它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4398281/