Frage

Ich habe eine nicht vertrauenswürdige Zeichenfolge, die ich als Text in einer HTML-Seite angezeigt werden soll. Ich brauche das Zeichen ‚<‘ und ‚&‘ als HTML-Entitäten zu entkommen. Je weniger Aufheben desto besser.

Ich bin mit UTF8 und müssen nicht andere Einheiten für Umlaute.

Gibt es eine eingebaute Funktion in Ruby oder Rails, oder soll ich meine eigene Rolle?

War es hilfreich?

Lösung

Die h Hilfsmethode:

<%=h "<p> will be preserved" %>

Andere Tipps

Zur Kasse der Ruby CGI Klasse. Es gibt Methoden, zu kodieren und zu dekodieren HTML sowie URLs.

CGI::escapeHTML('Usage: foo "bar" <baz>')
# => "Usage: foo &quot;bar&quot; &lt;baz&gt;"

In Ruby on Rails 3 HTML standardmäßig entwertet werden.

Für nicht entkommen Strings verwenden:

<%= raw "<p>hello world!</p>" %>

ERB :: Util.html_escape kann sein überall dort eingesetzt. Er ist ohne require in Rails zu verwenden.

Eine Ergänzung zu Christopher Bradford Antwort der HTML verwenden zu entkommen überall, da die meisten Menschen heutzutage nicht verwenden CGI, können Sie auch Rack verwenden:

require 'rack/utils'
Rack::Utils.escape_html('Usage: foo "bar" <baz>')

Sie können entweder h() oder html_escape() verwenden, aber die meisten Leute benutzen h() durch Konvention. h() ist die Abkürzung für html_escape() in Schienen.

In Ihrem Controller:

@stuff = "<b>Hello World!</b>"

In Ihrer Ansicht:

<%=h @stuff %>

Wenn Sie die HTML-Quelle anzuzeigen: Sie die Ausgabe sehen werden, ohne die Daten tatsächlich Bolding. D. h es wird als &lt;b&gt;Hello World!&lt;/b&gt; codiert.

Es erscheint ein als <b>Hello World!</b> angezeigt

Comparaison der verschiedenen Methoden:

> CGI::escapeHTML("quote ' double quotes \"")
=> "quote &#39; double quotes &quot;"

> Rack::Utils.escape_html("quote ' double quotes \"")
=> "quote &#x27; double quotes &quot;"

> ERB::Util.html_escape("quote ' double quotes \"")
=> "quote &#39; double quotes &quot;"

Ich schrieb meine eigenen mit Rails ActiveMailer kompatibel sein zu entkommen:

def escape_html(str)
  CGI.escapeHTML(str).gsub("&#39;", "'")
end

h() ist auch nützlich für die Anführungszeichen zu entkommen.

Zum Beispiel habe ich eine Ansicht, die einen Link mit einem Textfeld result[r].thtitle erzeugt. Der Text könnte einfache Anführungszeichen enthalten. Wenn ich nicht result[r].thtitle in der Bestätigungsmethode entkommen, würden die Javascript brechen:

&lt;%= link_to_remote "#{result[r].thtitle}", :url=>{ :controller=>:resource,
:action         =>:delete_resourced,
:id     => result[r].id,
:th     => thread,                                                                                                      
:html       =>{:title=> "<= Remove"},                                                       
:confirm    => h("#{result[r].thtitle} will be removed"),                                                   
:method     => :delete %>

&lt;a href="#" onclick="if (confirm('docs: add column &amp;apos;dummy&amp;apos; will be removed')) { new Ajax.Request('/resource/delete_resourced/837?owner=386&amp;th=511', {asynchronous:true, evalScripts:true, method:'delete', parameters:'authenticity_token=' + encodeURIComponent('ou812')}); }; return false;" title="&lt;= Remove">docs: add column 'dummy'</a>

. Hinweis: die :html Titel Erklärung wird auf magische Weise entkam durch Rails

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top