Czy istnieje sposób Railsy na konwersję \ n do <br>
?
Obecnie robię to tak:
mystring.gsub(/\n/, '<br>')
ruby-on-rails
ruby
daustin777
źródło
źródło
Odpowiedzi:
Tak, railsy mają
simple_format
dokładnie to, czego szukasz, i są nieco lepsze, ponieważ dodają także znaczniki akapitu. Widziećhttp://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
Przykład:
Zauważ, że
simple_format
zezwala na podstawowe znaczniki HTML, ale także przekazuje tekst, przezsanitize
który usuwa wszystkie skrypty, więc powinno być bezpieczne dla wprowadzania danych przez użytkownika.źródło
simple_format
automatycznie zawija podany tekst w<p>
znaczniki i nie można tego uniknąć.javascript:alert(\no!\)
jak podano w referencji. Mogą istnieć nieskończone warianty i przyszłe odmiany, z którymi hakerzy będą mogli pracować.wrapper_tag
opcję, która pozwala zmienić<p>
tag na cokolwiek innegoMożesz uczynić to bardziej ogólnym, wykonując:
W ten sposób zakryjesz DOS, * NIX, Mac i przypadkowe nieprawidłowe zakończenia linii.
źródło
simple_format
, możesz podzielić na tym wyrażeniu regularnym, użyj,map
aby zawinąć ciągi w otwierające i zamykającep
znaczniki, a następnie je połączyć.mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.join
Powinienem to zrobić, chociaż tego nie testowałem.<%= sanitize(planning.benefits.split(/(?:\n\r?|\r\n?)/).map {|x| "<li class='collection-item'>#{x}</li>"}.join) %>
. I działa jak urok, boohoo!mystring
może zawierać dowolny kod HTML.Powinieneś zachować ostrożność, gdy masz do czynienia z wprowadzaniem danych przez użytkownika.
simple_format
wstawia<br>
tagi, ale pozwoli na inne tagi HTML !Gdy używasz simple_format,
<b>Hello</b>
będzie renderowane jako „ Hello ”, możesz tego nie chcieć.Zamiast tego możesz użyć,
<%= h(c.text).gsub("\n", "<br>").html_safe %>
h()
najpierw zakoduje kod HTML,gsub
zastąpi podział wiersza ihtml_safe
umożliwi wyświetlanie<br>
tagów.Spowoduje to wyświetlenie dokładnie tego, co wprowadził użytkownik. Pozwala również na omawianie html np. W komentarzach.
źródło
simple_format
zezwala na podstawowe znaczniki HTML, należy zauważyć, że przekazuje również tekstsanitize
, co usuwa wszystko, co może być potencjalnie złośliwe. apidock.com/rails/ActionView/Helpers/TextHelper/simple_formatPo prostu użyj
w twoim css, a tekst będzie zawijany przy podziałach linii.
źródło
Możesz również rozważyć, co próbujesz zrobić - jeśli ładnie formatujesz tekst, który wprowadzili ludzie, możesz rozważyć filtr taki jak Markdown, aby umożliwić użytkownikom formatowanie tekstu bez otwierania puszki robaków, która jest HTML. Wiesz, tak jak w Stack Overflow.
źródło
Nie. To, co tam masz, jest powszechnie używaną alternatywą. Definicja, której używa większość ludzi, to:
Jest tak nazwany, ponieważ naśladuje funkcjonalność funkcji PHP o tej samej nazwie .
źródło
pracował dla mnie
źródło
Możesz to zrobić
simple_format(h(text))
-h
sprawi, że żaden kod HTML nie zostanie renderowany.Jak wspomniano w innych odpowiedziach, zrobi to nieco więcej, niż prosiłeś. Zawija całość
<p>
i dodaje więcej akapitów, jeśli masz gdziekolwiek podwójne znaki nowej linii.źródło