2010-12-09 59 views
2

我正在從文本區域取值並將它們存儲在數據庫中以供以後顯示。目前的情況是該字符串與數據庫中的「\ n」存儲在一起。在顯示之前,我使用replaceAll方法將所有\ n個字符替換爲
。但問題是當我顯示它時,<和>字符被轉換爲&lt;&gt;在db中存儲多行字符串並在網頁中顯示

什麼應該是解決這個問題的正確方法?

comment.replaceAll("\n", "<br>") 
+0

有些代碼顯示了你如何替換你的代碼呢? – Joe 2010-12-09 12:40:44

+0

在未來的問題中,請提及您使用的特定視圖技術,taglib和框架。例如。 「我在JSP上使用JSTL」或「我在Facelets上使用JSF」。或者只是適當地標記。只有`java`和'web-development`太廣泛了。 – BalusC 2010-12-09 12:45:52

回答

4

您需要在顯示過程中禁用轉義。目前還不清楚您使用的是哪種視圖技術和/或標籤卷,但這是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;來按原樣顯示換行符。

0

你一定知道你想要對你的字符串做什麼。在頁面的HTML部分使用它時,必須轉義字符<,>&(這是您所看到的)。

您看到的效果可能發生是因爲:a)您將字符串轉義兩次或b)在不應該轉義的地方使用轉義字符串。

您必須調試代碼以查看誰在何時轉義字符串。

相關問題