2016-03-18 16 views
0

Ich versuche, einen Teil der Inhalte, die von den Nutzern meiner App mit einem Rich-Text-Editor eingefügt wurden, zu bereinigen.Wie beginne ich mit Rail's Gem Sanitize, weil ich nicht in der Lage bin, ihr Schnellstart-Beispiel zu machen?

habe ich installiert die sanitize gem über Bündel installieren

und es erscheint auf der Liste der Edelsteine ​​installiert, fügte dann require 'sanitize' in application_controlled.rb

hat dieses Testcode in einem meiner Ansichten: <%= Sanitize.fragment('<p>1st <strong>sanitized </strong>comment</p>', Sanitize::Config::RELAXED) %> aber die Ausgabe ist <p>1st <strong>sanitized </strong>comment</p> und ich habe keine Ahnung, warum oder wie zu folgen, was damit nicht stimmt.

Antwort

1

Es ist nichts falsch daran. Sanitize::Config::RELAXED ermöglicht <p> und <strong>.

Um die Zeichenfolge vollständig zu bereinigen, überspringen Sie das zweite Argument.

<%= Sanitize.fragment('<p>1st <strong>sanitized </strong>comment</p>' %> 

=> `1st sanitized comment` 

Wenn Sie befürchten, dass die Zeichenfolge erscheint "wie sie ist", ohne die Umbauten zu entkommen, markieren Sie ihn als html_safe

<%= Sanitize.fragment('<p>1st <strong>sanitized </strong>comment</p>', Sanitize::Config::RELAXED).html_safe %> 

=> 1. hygienisiert Kommentar

+0

wahr zu sein scheint. Aber ist es nicht der Sinn zu sanieren, um 'html_safe' selbst anzuwenden? Ich meine, ist es nicht der Zweck von Sanitize, um 'html_safe' Ergebnisse zu erzeugen, außerdem wenn man seine vordefinierten Konfigurationen (BASIC, RELAXED ...) benutzt? – Catalin

+1

Für mich liegt der Sinn von 'sanitize' darin, möglicherweise bösartigen HTML zu entfernen, so dass Sie' # html_safe' mit einiger Sicherheit verwenden können. Soweit ich weiß, "sanitize" Ausgabe as-is reagiert "falsch" mit '#html_safe?', So dass Sie diesen zusätzlichen Schritt benötigen. Außerdem würde ich dazu neigen, den Ausgabe-String im Controller-Code zu erstellen, einschließlich des '# html_safe', so dass Checker wie' brakeman' keine falschen Positiven geben. – SteveTurczyn

+0

Ich habe noch 1 Frage. Als gute Praxis sollte die Bereinigung der Ausgabe im Controller einfach eine Frage sein von: 'def show @comment = @ post.comments.find (params [: id]) @ comment.content = Sanitize.fragment (@ comment.content). html_safe() end'? – Catalin