Чи є спосіб Railsy перетворити \ n в <br>
?
В даний час я роблю це так:
mystring.gsub(/\n/, '<br>')
Чи є спосіб Railsy перетворити \ n в <br>
?
В даний час я роблю це так:
mystring.gsub(/\n/, '<br>')
Відповіді:
Так, рейли має те, 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>
буде відображатися як " Привіт ", можливо, ви цього не хочете.
Замість цього ви можете використовувати <%= 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')
працював на мене