Pregunta

Estoy trabajando en un proyecto de rieles.Usando la etiqueta observe_field, tomo texto escrito en un área de texto, lo proceso en un control y muestro el resultado en un div (muy similar a la vista previa en el desbordamiento de pila).Todo funciona bien hasta que escribo ciertos caracteres especiales.

  1. ?=> hace que la variable no se encuentre en el objeto de parámetros
  2. (libra) => provoca un error de autenticidad no válido
  3. % => evita que el div se actualice
  4. & => todo lo que sigue después de & ya no se pasa a la variable en el servidor.

¿Hay una manera de resolver esto?

--- muestra de código ---

esta es la vista.('postbody' es un área de texto)

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

este es el controlador que se llama

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 

y este es el javascript que se crea:

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')})})
¿Fue útil?

Solución

Este es un tema de escape (como lo han dicho otros).

Querrás cambiar tu observe_field :with declaración a algo como:

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

Luego en tu controlador:

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

Otros consejos

¿Puede proporcionar un ejemplo de código?

Lo más probable es que solo necesites escapar de tus entidades HTML usando codificar o algo así.

¿Cómo se ve el Javascript generado?

Suena (a primera vista) como si no se pudiera escapar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top