Gibt es eine Railsy-Möglichkeit zum Konvertieren in \ n <br>?
Derzeit mache ich das so:
mystring.gsub(/\n/, '<br>')
Gibt es eine Railsy-Möglichkeit zum Konvertieren in \ n <br>?
Derzeit mache ich das so:
mystring.gsub(/\n/, '<br>')
Antworten:
Ja, Rails hat simple_formatgenau das, wonach Sie suchen, und ist etwas besser, da es auch Absatz-Tags hinzufügt. Sehen
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
Beispiel:
simple_format(mystring)
Beachten Sie, simple_formatdass grundlegende HTML-Tags zulässig sind, aber auch Text weitergeleitet wird, durch sanitizeden alle Skripts entfernt werden. Daher sollte dies für Benutzereingaben sicher sein.
simple_formatder bereitgestellte Text automatisch in <p>Tags eingeschlossen wird und dass diese Funktionalität nicht vermieden werden kann.
javascript:alert(\no!\)in der Referenz angegeben interpretieren . Es kann endlose und zukünftige Variationen geben, mit denen böswillige Hacker arbeiten können.
wrapper_tagOption, das <p>Tag für alles andere zu ändern
Sie können es allgemeiner machen, indem Sie Folgendes tun:
mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
Auf diese Weise würden Sie DOS, * NIX, Mac und versehentlich ungültige Zeilenenden abdecken.
simple_formatkönnen Sie diese Regex aufteilen, mapdie Zeichenfolgen in öffnende und schließende pTags einschließen und sie dann verbinden. mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.joinsollte es tun, obwohl ich es nicht getestet habe.
<%= sanitize(planning.benefits.split(/(?:\n\r?|\r\n?)/).map {|x| "<li class='collection-item'>#{x}</li>"}.join) %>. Und es funktioniert wie ein Zauber Boohoo!
mystringkönnte beliebiges HTML enthalten.
Sie sollten vorsichtig sein, wenn Sie mit Benutzereingaben arbeiten.
simple_formatfügt <br>Tags ein, erlaubt aber andere HTML-Tags !
Wenn Sie simple_format verwenden, <b>Hello</b>wird dies als " Hallo " gerendert. Möglicherweise möchten Sie dies nicht.
Stattdessen können Sie verwenden <%= h(c.text).gsub("\n", "<br>").html_safe %>
h(), um zuerst den HTML-Code zu codieren, gsubden Zeilenumbruch zu ersetzen und html_safedie <br>Anzeige der Tags zu ermöglichen.
Dies zeigt genau an, was der Benutzer eingegeben hat. Es erlaubt auch, HTML in zB Kommentaren zu diskutieren.
simple_formatgrundlegende HTML-Tags zulässig, es ist jedoch wichtig zu beachten, dass auch der Text weitergeleitet wird sanitize, wodurch alles entfernt wird, was möglicherweise bösartig sein könnte. apidock.com/rails/ActionView/Helpers/TextHelper/simple_format
Einfach benutzen
white-space: pre-line;
in Ihrem CSS und Text werden Zeilenumbrüche umbrochen.
Sie können auch überlegen, was Sie tun möchten. Wenn Sie den eingegebenen Text gut formatieren, können Sie einen Filter wie Markdown in Betracht ziehen , mit dem Ihre Benutzer ihren Text formatieren können, ohne die HTML-Dose mit Würmern zu öffnen. Sie wissen, wie es hier bei Stack Overflow ist.
Nee. Was Sie dort haben, ist die häufig verwendete Alternative. Die Definition, die die meisten Leute verwenden, ist:
def nl2br text
text.gsub(/\n/, '<br/>')
end
Es wird als solches benannt, weil es die Funktionalität der gleichnamigen PHP-Funktion nachahmt .
mystring.gsub(/\r\n|\r|\n/, '\n')
arbeitete für mich
Sie können dies tun simple_format(h(text))- dies stellt hsicher, dass kein HTML gerendert wird.
Wie in anderen Antworten erwähnt, wird dies etwas mehr bewirken, als Sie verlangt haben. Es packt das Ganze ein <p>und fügt weitere Absätze hinzu, wenn Sie irgendwo doppelte Zeilenumbrüche haben.