Domanda

Ho una stringa non attendibile che voglio mostrare come testo in una pagina HTML. Ho bisogno di sfuggire alle caratteri '<' e '&' come entità HTML. Il meno fastidi e meglio è.

Sto usando UTF8 e non ho bisogno di altri enti per le lettere accentate.

C'è una funzione built-in in Ruby o Rails, o devo rotolare il mio?

È stato utile?

Soluzione

Il metodo h helper:

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

Altri suggerimenti

CGI classe. Ci sono metodi per codificare e decodificare HTML e gli URL.

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

In Ruby on Rails 3 HTML sarà sfuggito per impostazione predefinita.

Per le stringhe non sfuggito utilizzano:

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

ERB :: Util.html_escape può essere utilizzato ovunque. E 'disponibile senza utilizzare require in Rails.

Un Oltre alla risposta di Christopher Bradford a utilizzare il codice HTML fuggire da nessuna parte, dal momento che la maggior parte delle persone non usano CGI al giorno d'oggi, è anche possibile utilizzare Rack:

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

È possibile utilizzare uno o h() html_escape(), ma la maggior parte delle persone usano h() per convenzione. h() è l'abbreviazione di html_escape() in Rails.

Nel vostro controller:

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

Secondo voi:

<%=h @stuff %>

Se si visualizza l'origine HTML: vedrete l'uscita senza grassetto effettivamente i dati. Cioè è codificato come &lt;b&gt;Hello World!&lt;/b&gt;.

Sarà visualizzato un visualizzato come <b>Hello World!</b>

Comparaison dei diversi metodi:

> 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;"

ho scritto la mia per essere compatibile con Rails ActiveMailer fuga:

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

h() è utile anche per sfuggire citazioni.

Per esempio, ho una visione che genera un collegamento mediante un result[r].thtitle campo di testo. Il testo potrebbe includere apici. Se io non sfuggì result[r].thtitle nel metodo di conferma, il Javascript romperebbe:

&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>

. Nota: la dichiarazione del titolo :html è magicamente sfuggito da Rails

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top