В Rails - есть ли метод рельсов для преобразования строк в строку?

Есть ли способ Railsy для преобразования \n в <br>?

В настоящее время я делаю так:

mystring.gsub(/\n/, '<br>')

Ответ 1

Да, rails имеет simple_format, который делает именно то, что вы ищете, и немного лучше, так как он также добавляет теги абзацев. См.

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

Пример:

 simple_format(mystring)

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

Ответ 2

Вы можете сделать это более общим, выполнив:

mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')

Таким образом, вы будете использовать DOS, * NIX, Mac и случайные недопустимые окончания строк.

Ответ 3

Вы должны быть осторожны с этим, когда имеете дело с пользовательским вводом.
simple_format вставляет теги <br>, но разрешает другие html-теги!

При использовании simple_format <b>Hello</b> будет отображаться как " Hello", возможно, вы не захотите этого.

Вместо этого вы можете использовать <%= h(c.text).gsub("\n", "<br>").html_safe %>
h() будет сначала кодировать html, gsub заменяет разрыв строки, а html_safe позволяет отображать теги <br>.

Это будет отображаться точно, что пользователь вводил. Он также позволяет обсуждать html, например. комментарии.

Ответ 4

Просто используйте

white-space: pre-line;

в вашем css и текст будет перенесен на разрывы строк.

Ответ 5

Вы также можете подумать над тем, что вы пытаетесь сделать, - если вы хорошо форматируете текст, который вводили люди, вы можете рассмотреть фильтр типа Markdown, чтобы ваши пользователи форматировали свой текст, не открывая банку червей, которая является HTML. Вы знаете, как здесь, в Stack Overflow.

Ответ 6

mystring.gsub(/\r\n|\r|\n/, '\n')

работал у меня

Ответ 7

Неа. То, что у вас есть, - это обычно используемая альтернатива. Определение, которое большинство людей использует, следующее:

   def nl2br text
       text.gsub(/\n/, '<br/>')
   end

Он называется как таковой, потому что он имитирует функциональные возможности PHP-функции с тем же именем.