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_format
genau 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_format
dass grundlegende HTML-Tags zulässig sind, aber auch Text weitergeleitet wird, durch sanitize
den alle Skripts entfernt werden. Daher sollte dies für Benutzereingaben sicher sein.
simple_format
der 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_tag
Option, 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_format
können Sie diese Regex aufteilen, map
die Zeichenfolgen in öffnende und schließende p
Tags einschließen und sie dann verbinden. mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.join
sollte 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!
mystring
könnte beliebiges HTML enthalten.
Sie sollten vorsichtig sein, wenn Sie mit Benutzereingaben arbeiten.
simple_format
fü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, gsub
den Zeilenumbruch zu ersetzen und html_safe
die <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_format
grundlegende 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 h
sicher, 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.