Есть ли способ конвертировать \ n в Railsy <br>
?
В настоящее время я делаю это так:
mystring.gsub(/\n/, '<br>')
Есть ли способ конвертировать \ n в Railsy <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
который удаляются все сценарии, поэтому он должен быть безопасным для ввода пользователем.
simple_format
автоматически переносит предоставленный текст в <p>
теги, и этой функции нельзя избежать.
javascript:alert(\no!\)
приведенному в справочнике. Могут существовать бесконечные варианты и будущие вариации, с которыми могут работать злоумышленники.
wrapper_tag
опция, позволяющая менять <p>
теги на что-нибудь еще
Вы можете сделать его более общим, выполнив:
mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
Таким образом вы охватите DOS, * NIX, Mac и случайные неверные окончания строк.
simple_format
вы можете разделить на это регулярное выражение, используйте, map
чтобы обернуть строки в открывающие и закрывающие p
теги, а затем присоединиться к ним. mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.join
должен это сделать, хотя я не тестировал.
<%= sanitize(planning.benefits.split(/(?:\n\r?|\r\n?)/).map {|x| "<li class='collection-item'>#{x}</li>"}.join) %>
. И это работает как шарм буху!
mystring
может содержать произвольный HTML.
Вы должны быть осторожны с этим, когда имеете дело с пользовательским вводом.
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, например, в комментариях.
simple_format
допускается использование основных HTML-тегов, важно отметить, что он также передает текст sanitize
, что удаляет все, что потенциально может быть вредоносным. apidock.com/rails/ActionView/Helpers/TextHelper/simple_format
Просто используйте
white-space: pre-line;
в вашем css, и текст будет переноситься по разрывам строки.
Вы также можете подумать о том, что вы пытаетесь сделать - если вы хорошо форматируете текст, который вводят люди, вы можете подумать о фильтре, таком как Markdown, чтобы ваши пользователи могли форматировать свой текст, не открывая банку червей, которая является HTML. Вы знаете, как будто это здесь, в Stack Overflow.
Нет. У вас есть часто используемая альтернатива. Большинство людей используют следующее определение:
def nl2br text
text.gsub(/\n/, '<br/>')
end
Он назван так, потому что имитирует функциональность одноименной функции PHP .
mystring.gsub(/\r\n|\r|\n/, '\n')
работал на меня
Вы можете сделать это simple_format(h(text))
- это h
гарантирует, что любой HTML-код не будет отображаться.
Как упоминалось в других ответах, это сделает немного больше, чем вы просили. Он оборачивает все это <p>
и добавляет больше абзацев, если у вас есть двойные символы новой строки.