Есть ли способ Railsy для преобразования \n в <br>
?
В настоящее время я делаю так:
mystring.gsub(/\n/, '<br>')
Есть ли способ Railsy для преобразования \n в <br>
?
В настоящее время я делаю так:
mystring.gsub(/\n/, '<br>')
Да, rails имеет simple_format
, который делает именно то, что вы ищете, и немного лучше, так как он также добавляет теги абзацев. См.
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
Пример:
simple_format(mystring)
Обратите внимание, что simple_format
позволяет базовые HTML-теги, но также передает текст через sanitize
, который удаляет все скрипты, поэтому он должен быть безопасным для ввода пользователем.
Вы можете сделать это более общим, выполнив:
mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
Таким образом, вы будете использовать DOS, * NIX, Mac и случайные недопустимые окончания строк.
Вы должны быть осторожны с этим, когда имеете дело с пользовательским вводом. 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, например. комментарии.
Просто используйте
white-space: pre-line;
в вашем css и текст будет перенесен на разрывы строк.
Вы также можете подумать над тем, что вы пытаетесь сделать, - если вы хорошо форматируете текст, который вводили люди, вы можете рассмотреть фильтр типа Markdown, чтобы ваши пользователи форматировали свой текст, не открывая банку червей, которая является HTML. Вы знаете, как здесь, в Stack Overflow.
mystring.gsub(/\r\n|\r|\n/, '\n')
работал у меня
Неа. То, что у вас есть, - это обычно используемая альтернатива. Определение, которое большинство людей использует, следующее:
def nl2br text
text.gsub(/\n/, '<br/>')
end
Он называется как таковой, потому что он имитирует функциональные возможности PHP-функции с тем же именем.