Existe-t-il un moyen Railsy de convertir \ n en <br>?
Actuellement, je le fais comme ceci:
mystring.gsub(/\n/, '<br>')
Existe-t-il un moyen Railsy de convertir \ n en <br>?
Actuellement, je le fais comme ceci:
mystring.gsub(/\n/, '<br>')
Réponses:
Oui, rails a simple_formatqui fait exactement ce que vous recherchez, et légèrement 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 cela simple_formatautorise les balises HTML de base, mais transmet également le texte à travers sanitizelequel supprime tous les scripts, il devrait donc être sûr pour les entrées utilisateur.
simple_formatenveloppe automatiquement le texte fourni dans des <p>balises, et que cette fonctionnalité ne peut être évitée.
javascript:alert(\no!\)celle donnée dans la référence. Il pourrait y avoir des variations infinies et futures avec lesquelles les pirates malveillants pourraient travailler.
wrapper_tagoption qui permet de changer de <p>balise pour n'importe quoi d'autre
Vous pouvez le rendre plus général en faisant:
mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
De cette façon, vous couvririez DOS, * NIX, Mac et les fins de ligne invalides accidentelles.
simple_formatvous pouvez diviser sur cette expression régulière, utiliser mappour envelopper les chaînes dans les pbalises d' ouverture et de fermeture , puis les joindre. mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.joindevrait le faire, même si je ne l'ai pas testé.
<%= sanitize(planning.benefits.split(/(?:\n\r?|\r\n?)/).map {|x| "<li class='collection-item'>#{x}</li>"}.join) %>. Et ça marche comme un charme boohoo!
mystringpourrait contenir du HTML arbitraire.
Vous devez être prudent avec cela lorsque vous traitez avec les entrées utilisateur.
simple_formatinsère des <br>balises mais cela autorisera d'autres balises html !
Lorsque vous utilisez simple_format, <b>Hello</b>sera rendu comme " 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 d'abord le html, gsubremplace le saut de ligne et html_safepermet aux <br>balises d'être affichées.
Cela affichera exactement ce que l'utilisateur a entré. Il permet également de discuter du html dans les commentaires par exemple.
simple_formatles balises HTML de base soient autorisées, il est important de noter qu'elles transmettent également le texte sanitize, ce qui supprime tout ce qui pourrait être potentiellement malveillant. apidock.com/rails/ActionView/Helpers/TextHelper/simple_format
Utilisez simplement
white-space: pre-line;
dans votre css et le texte sera enveloppé sur les sauts de ligne.
Vous pouvez également réfléchir à ce que vous essayez de faire - si vous formatez bien le texte que les gens ont entré, vous pouvez envisager un filtre comme Markdown pour permettre à vos utilisateurs de formater leur texte sans ouvrir la boîte de vers qui est HTML. Vous savez, comme c'est le cas ici chez Stack Overflow.
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 la fonction PHP du même nom .
mystring.gsub(/\r\n|\r|\n/, '\n')
travaillé pour moi
Vous pouvez faire simple_format(h(text))- leh cela garantira que le HTML n'est pas rendu.
Comme mentionné dans d'autres réponses, cela fera un peu plus que ce que vous avez demandé. Il enveloppe le tout <p>et ajoute plus de paragraphes si vous avez des doubles retours à la ligne n'importe où.