web-dev-qa-db-fra.com

Dans Rails - existe-t-il une méthode Rails pour convertir les nouvelles lignes en <br>?

Existe-t-il un moyen Railsy de convertir\n en <br>?

Actuellement, je le fais comme ça:

mystring.gsub(/\n/, '<br>')
107
daustin777

Oui, Rails a simple_format qui fait exactement ce que vous recherchez et un peu mieux, car il ajoute également des balises de paragraphe. Voir 

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

Exemple:

 simple_format(mystring)

Notez que simple_format autorise les balises HTML de base, mais transmet également le texte via sanitize, qui supprime tous les scripts, de sorte qu'il devrait être sécurisé pour les entrées utilisateur. 

241
Daniel Von Fange

Vous pouvez le rendre plus général en faisant:

mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')

De cette façon, vous couvririez les fins de ligne DOS, * NIX, Mac et accidentelles non valides.

38
Tomalak

Vous devez faire attention à cela lorsque vous traitez avec une entrée utilisateur.
simple_format insère des tags <br> mais il autorisera d'autres tags html !

Lorsque vous utilisez simple_format, <b>Hello</b> sera rendu sous la forme " Hello ", vous ne voudrez peut-être pas cela.

Au lieu de cela, vous pouvez utiliser <%= h(c.text).gsub("\n", "<br>").html_safe %>
h() encodera le code HTML en premier, gsub remplace le saut de ligne et html_safe permet d'afficher les balises <br>.

Cela affichera exactement ce que l'utilisateur a entré. Cela permet également de discuter de HTML dans, par exemple, commentaires.

27
jomo

Simplement utiliser

white-space: pre-line;

dans votre css et le texte va envelopper les sauts de ligne.

14
bershika

Vous pouvez également envisager ce que vous essayez de faire - si vous formatez correctement le texte que les gens ont entré, vous pouvez envisager un filtre tel que Markdown pour permettre à vos utilisateurs de formater leur texte sans ouvrir la boîte de Pandore qui existe. est HTML. Vous savez, comme ici chez Stack Overflow.

1
Jim Puls
mystring.gsub(/\r\n|\r|\n/, '\n')

a travaillé pour moi

0
user7516728

Nan. Ce que vous avez là est l’alternative couramment utilisée. La définition que la plupart des gens utilisent est:

   def nl2br text
       text.gsub(/\n/, '<br/>')
   end

Il est nommé comme tel car il imite la fonctionnalité de fonction PHP du même nom .

0
ryeguy