vs raw html_safe vs h a unescape html

Supponiamo di avere la seguente stringa

@x = "<a href='#'>Turn me into a link</a>"

A mio modo di vedere, voglio un link da visualizzare. Che è, non voglio che tutto quello in @x essere escape e visualizzati come una stringa. Qual è la differenza tra l’utilizzo di

<%= raw @x %>
<%= h @x %>
<%= @x.html_safe %>

?

InformationsquelleAutor grautur | 2010-11-22

 

6 Replies
  1. 382

    Considerando Rails 3:

    html_safe realtà “imposta la stringa” come HTML cassetta di Sicurezza (è un po ‘ più complicato di così, ma è fondamentalmente). In questo modo, è possibile tornare HTML cassetta di Sicurezza stringhe da aiutanti o modelli a volontà.

    h può essere usato solo all’interno di un controller o di vista, dal momento che è da un helper. Gli output per essere sfuggito. Non è davvero obsoleto, ma è più probabile che non si usano più: l’unico utilizzo è quello di “ripristinare” un html_safe dichiarazione, abbastanza inusuale.

    Anteponendo la tua espressione con raw è in realtà equivalente alla chiamata to_s incatenato con html_safe su di esso, ma viene dichiarata in un helper, proprio come h, in modo da può essere utilizzato solo su controller e viste.

    SafeBuffers e Rails 3.0” è una bella spiegazione su come il SafeBuffers (la classe che fa il html_safe magia) di lavoro.

    • Non direi che h sarà mai obsoleto. Utilizzando "Hi<br/>#{[email protected] user.name}".html_safe è abbastanza comune e l’accettazione dell’uso.
    • l’utilizzo interessante, anche se penso che si scende nella “insolito” di categoria.
    • Batista Non è insolito a tutti, qui è in un Railscast in basso: asciicasts.com/episodes/204-xss-protection-in-rails-3
    • Stringa#html_safe effettivamente restituisce un’istanza di ActiveSupport::SafeBuffer che avvolge la stringa originale e #html_safe? . La stringa originale non diventare #html_safe? dopo la chiamata #html_safe su di esso.
    • Grazie per il complemento, @greenagain… ho volutamente semplificato la spiegazione e il link alla SafeBuffer‘s articolo completo per chi è curioso.
    • Si noti che c’è una sottile differenza tra raw e html_safe in pratica: raw(nil) restituisce una stringa vuota, mentre nil.html_safe genera un’eccezione.
    • Grande articolo collegato per le persone che vogliono sapere cosa sta realmente accadendo dietro la magia di Rails punto di vista-grazie!
    • e allora perché diamine è html_safe togliendo i trattini dal mio url?
    • h non “torna” un html_safe dichiarazione. Quando una stringa è html_safe, h, non fa nulla.

  2. 109

    Penso che vale la pena di ripetere: html_safe non non HTML-fuga di stringa. Di fatto, impediscono la stringa da essere sfuggito.

    <%= "<script>alert('Hello!')</script>" %>

    metterà:

    &lt;script&gt;alert(&#x27;Hello!&#x27;)&lt;/script&gt;

    nel tuo HTML fonte (yay, in modo sicuro!), mentre:

    <%= "<script>alert('Hello!')</script>".html_safe %>

    si aprirà la finestra di avviso (sei sicuro che sia quello che vuoi?). Quindi probabilmente non si desidera chiamare html_safe su qualsiasi le stringhe inserite dall’utente.

    • In altre parole, html_safe non è “si prega di fare questo html sicura”, è l’opposto, è il programmatore di raccontare rotaie che “è una stringa html cassetta di sicurezza, prometto!”
    • in realtà deve essere rinominato .unescape_html nelle guide di codice sorgente..
    • in realtà sono venuto qui per capire se è effettivamente unescape o se fa solo un marchio che non è necessario to_escape. Una bella differenza. Oh beh, a leggere il codice sorgente in poi.
  3. 46

    La differenza è tra i Binari’ html_safe() e raw(). C’è un ottimo post di Yehuda Katz su questo, e davvero si riduce a questo:

    def raw(stringish)
    
      stringish.to_s.html_safe
    
    end

    Sì, raw() è un wrapper di html_safe() che le forze dell’input Stringa e quindi chiama html_safe() su di esso. È anche il caso che raw() è un helper in un modulo, mentre html_safe() è un metodo della classe String che rende un nuovo ActiveSupport::SafeBuffer istanza — che ha un @dirty bandiera in esso.

    Fare riferimento a “Rails html_safe vs. raw“.

  4. 27
    1. html_safe :

      Segna una stringa di fiducia, e cassetta di sicurezza. Sarà inserito in HTML, senza ulteriori fuga eseguita.

      "<a>Hello</a>".html_safe
      #=> "<a>Hello</a>"
      
      nil.html_safe
      #=> NoMethodError: undefined method `html_safe' for nil:NilClass
    2. raw :

      raw è solo un wrapper di html_safe. Utilizzare raw se ci sono possibilità che la stringa sarà nil.

      raw("<a>Hello</a>")
      #=> "<a>Hello</a>"
      
      raw(nil)
      #=> ""
    3. h alias per html_escape :

      Un metodo di utilità per la fuoriuscita dei tag HTML caratteri. Utilizzare questo metodo per sfuggire a qualsiasi contenuto non sicuro.

      In Rails 3, e sopra di esso è usato in modo predefinito, quindi non è necessario utilizzare questo metodo in modo esplicito

  5. 1

    In Semplici Guide termini:

    h rimuovere i tag html in numero di caratteri, in modo che il rendering non rompere il vostro html

    html_safe imposta un valore booleano in corda in modo che la stringa è considerato come html salvare

    raw Converte a html_safe di stringa

    • h è html_safe, il che significa che il codice HTML è reso come-è.

Lascia un commento