Чи є спосіб 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')
працював на мене