我正在從文本區域取值並將它們存儲在數據庫中以供以後顯示。目前的情況是該字符串與數據庫中的「\ 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