Разбор символов новой строки в текстовых областях без разрешения всех тегов HTML - PullRequest
5 голосов
/ 23 ноября 2010

У меня есть поле textarea, где пользователи могут вводить контент.Когда дело доходит до отображения их записи на странице, rails возвращает \n для каждого разрыва строки, что выглядит как отсутствие разрыва для html на странице.

Исходя из того, что я понял, стандартный способ получениявокруг этого .gsub команда, заменяющая \n на <br />, а затем .html_safe в конце, чтобы обеспечить <br /> рендеринг.

Проблема в том, что я не хочудля html_safe содержимое - html все равно следует заменить, но теги <br /> должны быть вставлены в (не экранированный) контент.

Предложения приветствуются.

Ответы [ 4 ]

16 голосов
/ 23 ноября 2010

Метод simple_format подходит для форматирования разрывов строк.Он переносит текстовые блоки в теги <p> и преобразует символы новой строки в разрывы строк (<br>) (двойные символы новой строки разбивают следующий текст на второй абзац).и вместо этого просто позволяет им.То, что вы после комбинации simple_format вместе с sanitize , должно работать хорошо.Попробуйте использовать это:

<%=raw sanitize(simple_format(@article.body), :tags => %w(br p) ) %>

6 голосов
/ 31 января 2011

Если вы хотите, чтобы HTML-теги, введенные в текстовую область, были видны, но все еще хотите отображать разрывы строк, попробуйте следующее:

<%= simple_format(h @article.body) %>

"h" заключает в кавычки все специальные символы HTML, а "simple_format" затем преобразует разрывы строк в
.

2 голосов
/ 23 ноября 2010

В зависимости от того, что вы хотите сделать, вы можете сохранить \n как есть, а затем, при отображении контента на экране, использовать (h @comment.content).gsub("\n", '<br>'), который должен сначала экранировать все HTML-теги, а затем заменить\n с <br>

0 голосов
/ 01 августа 2014

Всего этого можно избежать, используя теги &lt;pre&gt;.Это также имеет преимущество сохранения табуляции.например,

&lt;pre&gt;&lt;%= @article.body %&gt;&lt;/pre&gt;
...