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_format
qui 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_format
autorise les balises HTML de base, mais transmet également le texte à travers sanitize
lequel supprime tous les scripts, il devrait donc être sûr pour les entrées utilisateur.
simple_format
enveloppe 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_tag
option 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_format
vous pouvez diviser sur cette expression régulière, utiliser map
pour envelopper les chaînes dans les p
balises d' ouverture et de fermeture , puis les joindre. mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.join
devrait 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!
mystring
pourrait contenir du HTML arbitraire.
Vous devez être prudent avec cela lorsque vous traitez avec les entrées utilisateur.
simple_format
insè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, gsub
remplace le saut de ligne et html_safe
permet 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_format
les 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ù.