Question

Je travaille sur un projet de rails.En utilisant la balise observe_field, je prends le texte tapé dans une zone de texte, je le traite dans un contrôle et j'affiche le résultat dans un div (très similaire à l'aperçu dans le débordement de pile).Tout fonctionne bien jusqu'à ce que je tape certains caractères spéciaux.

  1. ?=> fait en sorte que la variable ne soit pas trouvée dans l'objet params
  2. (livre) => provoque une erreur d'authenticité invalide
  3. % => arrête la mise à jour du div
  4. & => tout ce qui suit le & n'est plus transmis à la variable sur le serveur.

Existe-t-il un moyen de résoudre ce problème ?

--- exemple de code ---

c'est la vue.( 'postbody' est une zone de texte)

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

c'est le contrôleur qui s'appelle

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 

et voici le javascript créé :

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')})})
Était-ce utile?

La solution

Il s'agit d'un problème d'évasion (comme l'ont déclaré d'autres).

Vous voudrez changer votre instruction observe_field :with en quelque chose comme :

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

Puis dans votre contrôleur :

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

Autres conseils

Pouvez-vous fournir un exemple de code ?

Il est plus probable qu'improbable que vous ayez simplement besoin d'échapper à vos entités HTML en utilisant encodeur ou quelque chose comme ça.

À quoi ressemble le Javascript généré ?

On dirait (à première vue) que l'on n'y échappe pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top