2010-11-23 2 views
5

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

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

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

Предложения оценены.

ответ

16

Метод simple_format подходит для форматирования разрывов строк. Он обертывает текстовые блоки в тегах <p> и преобразует символы новой строки в разрывы строк (<br>) (двойные символы новой строки разбивают следующий текст на второй абзац).

Однако он не пропускает другие символы html, а вместо этого просто позволяет им. За то, что вы после комбинации simple_format, а также с sanitize, должны сделать красиво. Попробуйте использовать это:

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

+0

Отлично - большое спасибо. ;-) – PlankTon 2010-11-23 08:00:00

2

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

6

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

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

«Н» цитирует все HTML специальные символы и «simple_format» затем преобразуют разрывы строк в <. >.

-1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^