Ich habe eine nicht vertrauenswürdige Zeichenfolge, die ich als Text in einer HTML-Seite anzeigen möchte. Ich muss die Zeichen ' <
' und ' &
' als HTML-Entitäten maskieren. Je weniger Aufhebens desto besser.
Ich verwende UTF8 und benötige keine anderen Entitäten für Buchstaben mit Akzent.
Gibt es eine integrierte Funktion in Ruby oder Rails oder sollte ich meine eigene rollen?
&<>"'/
Antworten:
Die
h
Hilfsmethode:quelle
h
ist ein Alias fürhtml_escape
Testen Sie die Ruby CGI- Klasse. Es gibt Methoden zum Codieren und Decodieren von HTML sowie URLs.
quelle
In Ruby on Rails 3 wird HTML standardmäßig maskiert.
Verwenden Sie für nicht maskierte Zeichenfolgen:
quelle
ERB :: Util.html_escape kann überall verwendet werden. Es ist ohne Verwendung
require
in Rails verfügbar .quelle
CGI.escapeHTML
unterEine Ergänzung zu Christopher Bradfords Antwort, den HTML-Code überall zu verwenden, da die meisten Leute ihn
CGI
heutzutage nicht verwenden , können Sie auch Folgendes verwendenRack
:quelle
Sie können entweder
h()
oder verwendenhtml_escape()
, aber die meisten Leute verwenden esh()
gemäß Konvention.h()
ist die Abkürzung fürhtml_escape()
in Rails.In Ihrem Controller:
Aus Ihrer Sicht:
Wenn Sie die HTML-Quelle anzeigen: Sie sehen die Ausgabe, ohne die Daten tatsächlich zu fetten. Dh es ist verschlüsselt als
<b>Hello World!</b>
.Es wird angezeigt und angezeigt als
<b>Hello World!</b>
quelle
Vergleich der verschiedenen Methoden:
Ich habe meine eigene geschrieben, um mit Rails ActiveMailer kompatibel zu sein.
quelle
h()
ist auch nützlich, um Anführungszeichen zu umgehen.Zum Beispiel habe ich eine Ansicht, die einen Link mithilfe eines Textfelds generiert
result[r].thtitle
. Der Text kann einfache Anführungszeichen enthalten. Wenn ich nichtresult[r].thtitle
in der Bestätigungsmethode entkommen würde, würde das Javascript brechen:Hinweis: Die
:html
Titeldeklaration wird von Rails auf magische Weise maskiert.quelle