Pergunta

Estou trabalhando em um projeto de trilhos.Usando a tag observe_field, estou pegando o texto digitado em uma área de texto, processando-o em um controle e exibindo o resultado em uma div (muito semelhante à visualização no stack overflow).Tudo funciona bem até eu digitar certos caracteres especiais.

  1. ?=> faz com que a variável não seja encontrada no objeto params
  2. (libra) => causa um erro de autenticidade inválido
  3. % => impede que o div seja atualizado
  4. & => tudo após o & não é mais passado para a variável no servidor.

Há uma maneira de resolver isto?

--- exemplo de código ---

esta é a visão.( 'postbody' é uma área de texto)

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

este é o controlador que é chamado

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 este é o javascript que é criado:

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

Solução

Este é um problema que escapa (como afirmado por outros).

Você desejará alterar sua instrução observe_field :with para algo como:

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

Então no seu controlador:

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

Outras dicas

Você pode fornecer um exemplo de código?

Muito provavelmente você só precisará escapar de suas entidades HTML usando codificador ou algo assim.

Qual é a aparência do Javascript gerado?

Parece (à primeira vista) que não há escapatória.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top