Wie in HTML-Kodier / einen String entkommen? Gibt es eine eingebaute in?
-
22-08-2019 - |
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?
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 "bar" <baz>"
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 <b>Hello World!</b>
codiert.
Es erscheint ein als <b>Hello World!</b>
angezeigt
Comparaison der verschiedenen Methoden:
> CGI::escapeHTML("quote ' double quotes \"")
=> "quote ' double quotes ""
> Rack::Utils.escape_html("quote ' double quotes \"")
=> "quote ' double quotes ""
> ERB::Util.html_escape("quote ' double quotes \"")
=> "quote ' double quotes ""
Ich schrieb meine eigenen mit Rails ActiveMailer kompatibel sein zu entkommen:
def escape_html(str)
CGI.escapeHTML(str).gsub("'", "'")
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:
<%= 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 %>
<a href="#" onclick="if (confirm('docs: add column &apos;dummy&apos; will be removed')) { new Ajax.Request('/resource/delete_resourced/837?owner=386&th=511', {asynchronous:true, evalScripts:true, method:'delete', parameters:'authenticity_token=' + encodeURIComponent('ou812')}); }; return false;" title="<= Remove">docs: add column 'dummy'</a>
. Hinweis: die :html
Titel Erklärung wird auf magische Weise entkam durch Rails