2008-08-27 9 views
1

Je travaille sur un projet de rails. En utilisant le tag observer_field, je suis en train de saisir du texte dans une zone de texte, de le traiter dans un contrôle et d'afficher 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.Problèmes lors du passage de caractères spéciaux avec observer_field

  1. ? => Fait que la variable ne se trouve pas dans les params objet
  2. (livre) => provoque une erreur d'authenticité invalide
  3. % => arrête la div d'être mis à jour
  4. & => tout après la & est n'est plus passé dans la variable sur le serveur.

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

--- échantillon 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 est appelé

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 c'est le javascript qui est 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')})}) 

Répondre

3

Ceci est un problème d'échappement (comme indiqué par d'autres).

Vous voulez changer votre observe_field: avec déclaration à quelque chose comme:

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

Ensuite, dans votre contrôleur:

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

Pouvez-vous fournir un échantillon de code?

Plus que probablement, vous aurez juste besoin d'échapper à vos entités HTML en utilisant encodeuri ou quelque chose comme ça.

0

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

Sons (à première vue) comme si elle ne s'échappait pas.