Как разрешить новые строки в выводе ERB - PullRequest
4 голосов
/ 07 ноября 2011

Я пытаюсь показать содержимое поля из базы данных в элементе <p>.В шаблоне html.erb код выглядит так:

<p><%= front.gsub(/(\r)?\n/, "<br>") %></p> ...

Проблема, с которой я столкнулся, заключается в том, что для того, чтобы избежать разрывов, я должен применить метод .html_safe в конце вышеупомянутого gsub,но это открывает все приложение для атак XSS.Как я могу разрешить только перерывы?

Ответы [ 3 ]

8 голосов
/ 07 ноября 2011

Вы можете использовать метод simple_format.

<%= simple_format(front) %>

Подробнее здесь => http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

2 голосов
/ 07 ноября 2011

Рассматривали ли вы вместо этого текст в теги <pre>? Это сохранит основное форматирование (новые строки, пробелы, ...).

2 голосов
/ 07 ноября 2011

Это основано на помощнике simple_format.Мы можем использовать sanitize для удаления неверных тегов, допускающих атаки XSS.

<%= sanitize(front).gsub(/(\r)?\n/, "<br/>").html_safe %>

Вы также можете использовать strip_tags , если хотите удалить все теги HTML перед заменой новых строк на <br>.

<%= strip_tags(front).gsub(/(\r)?\n/, "<br/>").html_safe %>
...