2010-12-09 14 views
2

私はテキスト領域から値を取り出し、後で表示するためにデータベースに格納しています。現在のシナリオでは、文字列はdbに "\ n"で格納されます。表示する前に、すべての\ n文字をreplaceAllメソッドを使用して
に置き換えます。しかし、問題は私がそれを表示すると<と>文字が&lt;&gt;に変換されることです。複数の文字列をデータベースに格納してWebページに表示する

これを解決する正しい方法は何でしょうか?

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

交換の仕組みを示すコードはありますか? – Joe

+0

今後の質問では、使用している特定のビューテクノロジ、タグリブおよびフレームワークについて言及してください。例えば。 「JSPでJSTLを使用しています」または「FaceletsでJSFを使用しています」または、適切なタグを付けるだけです。 'java'と' web-development'だけが広すぎます。 – BalusC

+0

@BalusC多分私は幅広い解決策を探していました。あなたのCSSソリューションでもっと多くの人々が使用できるように見えますが、そのソリューションがJSTLのためのものであれば、その有用性は低くなります。 –

答えて

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を保ちます。あなたは、例えばJsoupの助けを借りてDBに保存する前にそれをきれいにしたいかもしれません。

ところで、replaceAll()の代わりに、CSS white-space: pre;をそのまま使用して改行をそのまま表示することもできます。

+0

CSSソリューションのアップコート –

0

あなたの文字列で何をしたいのかを意識する必要があります。ページのHTML部分で使用する場合は、<>、および&の文字をエスケープする必要があります(これは表示されます)。

あなたは、a)文字列を2回エスケープするか、またはb)エスケープしないでください。

文字列をエスケープするユーザーを確認するには、コードをデバッグする必要があります。