2010-12-09 5 views
2

Je récupère les valeurs d'une zone de texte et les stocke dans la base de données pour les afficher ultérieurement. Le scénario actuel est que la chaîne est stockée avec "\ n" dans la base de données. Avant l'affichage, je remplace tous les caractères \ n par
en utilisant les méthodes replaceAll. Mais le problème est quand je l'affiche, < et> caractères sont convertis en &lt; et &gt;.Enregistrement de chaînes multilignes dans db et affichage de celles-ci dans la page Web

Quelle devrait être la bonne approche pour résoudre ce problème?

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

Que diriez-vous d'un code qui montre comment vous faites votre remplacement? – Joe

+0

Dans les prochaines questions, veuillez mentionner la technologie de vue spécifique, taglib et le framework que vous utilisez. Par exemple. "J'utilise JSTL sur JSP" ou "J'utilise JSF sur Facelets". Ou juste tagger de manière appropriée. Seuls 'java' et' web-development' sont trop larges. – BalusC

+0

@BalusC Peut-être que je cherchais une solution large. La façon dont je le vois, avec votre solution CSS beaucoup plus de gens peuvent l'utiliser, mais l'utilité serait moindre si la solution était pour JSTL seulement. –

Répondre

4

Vous devez désactiver l'échappement pendant l'affichage. La technologie de vue et/ou taglib que vous utilisez n'est pas claire, mais ceci est typique pour JSTL <c:out> et JSF <h:outputText>. Par défaut, ils échappent par défaut à predefined HTML/XML entites, mais ont un attribut supplémentaire pour désactiver l'échappement.

JSTL:

<c:out value="${bean.text}" escapeXml="false" /> 

JSF:

<h:outputText value="#{bean.text}" escape="false" /> 

Cependant, gardez à l'esprit XSSattacks pour le cas où ces textes sont entrés contrôlés par l'utilisateur. Vous voudrez peut-être le nettoyer avant d'enregistrer dans DB avec l'aide de par exemple Jsoup. Par ailleurs, au lieu de replaceAll(), vous pouvez également utiliser CSS white-space: pre; pour afficher les nouvelles lignes telles quelles.

+0

upvote pour la solution CSS –

0

Vous devez savoir ce que vous voulez faire de votre chaîne. En l'utilisant dans la partie HTML de la page, les caractères <, > et & doivent être échappés (ce que vous voyez). L'effet que vous voyez peut arriver parce que a) vous échappez deux fois à la chaîne ou b) vous utilisez une chaîne échappée dans un endroit où elle ne devrait pas être échappée.

Vous devez déboguer le code pour voir qui échappe la chaîne quand.

Questions connexes