2010-11-23 3 views
5

Ich habe ein Textfeld, in dem Benutzer Inhalt eingeben können. Wenn es darum geht, ihren Eintrag auf einer Seite anzuzeigen, gibt rails für jeden Zeilenumbruch \n zurück, was als kein Abbruch für HTML auf der Seite erscheint.Newline-Zeichen in Textfeldern analysieren, ohne alle HTML-Tags zuzulassen

Von dem, was ich sammle, der normale Weg, um diese zu bekommen ist ein .gsub Befehl, \n mit <br /> ersetzt, und dann einem .html_safe am Ende der <br /> macht sicherzustellen.

Das Problem ist, ich möchte nicht html_safe den Inhalt - HTML sollte noch ersetzt werden, aber <br /> Tags sollten in den (nicht maskiert) Inhalt injiziert werden.

Vorschläge geschätzt.

Antwort

16

Die Methode simple_format eignet sich gut zum Formatieren von Zeilenumbrüchen. Es umschließt Textblöcke in <p> Tags und konvertiert Zeilenumbrüche in Zeilenumbrüche (<br>) (doppelter Zeilenumbruch unterbricht den folgenden Text in einen zweiten Absatz).

Es entgeht jedoch nicht anderen HTML-Zeichen und erlaubt stattdessen nur sie. Für was Sie wollen, sollte eine Kombination von simple_format zusammen mit sanitize gut tun. Versuchen Sie dies mit:

<%=raw sanitize(simple_format(@article.body), :tags => %w(br p)) %>

+0

Perfekt - vielen Dank. ;-) – PlankTon

+4

Oder noch besser, benutze die eingebaute 'h()' Methode: '<% = simple_format h @ article.body%>' –

+0

Wenn du das in einem Model oder Controller machen willst: 'ActionController :: Base.helpers.raw ActionController :: Base.helpers.sanitize ((ActionController :: Base.helpers.simple_format (Körper)),: tags =>% w (br p)) ' – richardaday

2

Je nachdem, was Sie tun möchten, können Sie die \n speichern, wie es ist, und dann, wenn der Inhalt auf dem Bildschirm angezeigt wird, verwenden (h @comment.content).gsub("\n", '<br>'), die alle HTML-Tags zum ersten ist zu entkommen, und dann die \n mit der ersetzen <br>

6

Wenn Sie HTML-Tags im Textbereich sichtbar eingegeben wollen, wollen aber trotzdem Linie zu zeigen, bricht, versuchen Sie dies:

<%= simple_format(h @article.body) %> 

Das „h“, zitiert die ganze HTML-Sonderzeichen und "simple_format" konvertiert dann die Zeilenumbrüche in <br>.

-1

All dies kann durch Verwendung von &lt;pre&gt; Tags vermieden werden. Dies hat den Vorteil, dass das Tab-Register erhalten bleibt. zB

&lt;pre&gt;&lt;%= @article.body %&gt;&lt;/pre&gt;