Domanda

Sto lavorando ad un progetto di rotaie.Utilizzando il tag osservato_campo, prendo il testo digitato in un'area di testo, lo elaboro in un controllo e visualizzo il risultato in un div (molto simile all'anteprima nello stack overflow).Tutto funziona bene finché non digito determinati caratteri speciali.

  1. ?=> fa sì che la variabile non venga trovata nell'oggetto params
  2. (sterlina) => causa un errore di autenticità non valida
  3. % => impedisce l'aggiornamento del div
  4. & => ogni cosa dopo & non viene più passata nella variabile sul server.

C'è un modo per risolvere questo problema?

--- esempio di codice ---

questa è la vista.('postbody' è un'area di testo)

<%= observe_field 'postbody', 
                    :update => 'preview', 
                    :url => {:controller => 'blog', :action => 'textile_to_html'},
                    :frequency => 0.5,
                    :with => 'postbody' -%>

questo è il controller che viene chiamato

def textile_to_html
    text = params['postbody']
    if text == nil then 
        @textile_to_html = '<br/>never set'
    else 
        r = RedCloth.new text
        @textile_to_html = r.to_html
    end 
    render :layout => false 
end 

e questo è il javascript che viene creato:

new Form.Element.Observer('postbody', 0.5, function(element, value) {new Ajax.Updater('preview', '/blog/textile_to_html', {asynchronous:true, evalScripts:true, parameters:'postbody=' + value + '&authenticity_token=' + encodeURIComponent('22f7ee12eac9efd418caa0fe76ae9e862025ef97')})})
È stato utile?

Soluzione

Questo è un problema di fuga (come affermato da altri).

Ti consigliamo di modificare l'istruzioneoblate_field :with in qualcosa del tipo:

  :with => "'postbody=' + encodeURIComponent(value)"

Quindi nel controller:

def textile_to_html
  text = URI.unescape(params['postbody'])
  ...

Altri suggerimenti

Potete fornire un esempio di codice?

Molto probabilmente dovrai semplicemente sfuggire alle tue entità HTML utilizzando codifica o qualcosa di simile.

Che aspetto ha il Javascript generato?

Sembra (a prima vista) che non sia stato possibile scappare.

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