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

res*_*day 3 java encoding

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

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

comment.replaceAll("\n", "<br>")
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 5

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

JSTL:

<c:out value="${bean.text}" escapeXml="false" />
Run Code Online (Sandbox Code Playgroud)

JSF:

<h:outputText value="#{bean.text}" escape="false" />
Run Code Online (Sandbox Code Playgroud)

但是,对于这些文本是用户控制输入的情况,请记住XSS 攻击.您可能希望在借助例如Jsoup保存DB之前清除它.

顺便说一下,replaceAll()您也可以使用CSS white-space: pre;来按原样显示换行符.