Czy istnieje sposób Railsy na konwersję \ n do <br>
?
Obecnie robię to tak:
mystring.gsub(/\n/, '<br>')
Czy istnieje sposób Railsy na konwersję \ n do <br>
?
Obecnie robię to tak:
mystring.gsub(/\n/, '<br>')
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:
simple_format(mystring)
Zauważ, że simple_format
zezwala na podstawowe znaczniki HTML, ale także przekazuje tekst, przez sanitize
który usuwa wszystkie skrypty, więc powinno być bezpieczne dla wprowadzania danych przez użytkownika.
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 innego
Możesz uczynić to bardziej ogólnym, wykonując:
mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
W ten sposób zakryjesz DOS, * NIX, Mac i przypadkowe nieprawidłowe zakończenia linii.
simple_format
, możesz podzielić na tym wyrażeniu regularnym, użyj, map
aby zawinąć ciągi w otwierające i zamykające p
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 i html_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.
simple_format
zezwala na podstawowe znaczniki HTML, należy zauważyć, że przekazuje również tekst sanitize
, co usuwa wszystko, co może być potencjalnie złośliwe. apidock.com/rails/ActionView/Helpers/TextHelper/simple_format
Po prostu użyj
white-space: pre-line;
w twoim css, a tekst będzie zawijany przy podziałach linii.
Nie. To, co tam masz, jest powszechnie używaną alternatywą. Definicja, której używa większość ludzi, to:
def nl2br text
text.gsub(/\n/, '<br/>')
end
Jest tak nazwany, ponieważ naśladuje funkcjonalność funkcji PHP o tej samej nazwie .
mystring.gsub(/\r\n|\r|\n/, '\n')
pracował dla mnie