Хранение многострочных строк в БД и отображение их на веб-странице - PullRequest
3 голосов
/ 09 декабря 2010

Я беру значения из текстовой области и сохраняю их в базе данных для последующего отображения. Текущий сценарий заключается в том, что строка хранится с "\ n" в БД. Перед отображением я заменяю все символы \ n на
, используя методы replaceAll. Но проблема в том, что когда я его отображаю, символы <и> преобразуются в &lt; и &gt;.

Какой должен быть правильный подход для решения этой проблемы?

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

Ответы [ 2 ]

5 голосов
/ 09 декабря 2010

Вам необходимо отключить экранирование во время отображения. Неясно, какую технологию просмотра и / или теги вы используете, но это типично для JSTL <c:out> и JSF <h:outputText>. Они оба по умолчанию экранируют предопределенные HTML / XML объекты , но имеют дополнительный атрибут для отключения экранирования.

JSTL:

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

JSF:

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

Однако помните XSS Атаки на случай, если эти тексты вводятся пользователем. Вы можете очистить его перед сохранением в БД с помощью, например, Jsoup .

Кстати, вместо replaceAll() вы также можете просто использовать CSS white-space: pre;, чтобы отобразить новые строки как есть.

0 голосов
/ 09 декабря 2010

Вы должны знать, что вы хотите сделать со своей строкой.При использовании в HTML-части страницы символы <, > и & должны быть экранированы (это то, что вы видите).

Эффект, который вы видите, может произойти, потому что) вы дважды экранируете строку или б) вы используете экранированную строку в месте, где она не должна быть экранирована.

Вы должны отладить код, чтобы увидеть, кто экранирует строку, когда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...