用observe_field传递特殊字符的问题

时间:2008-08-27 21:17:18

标签: ruby-on-rails ajax

我正在开发一个rails项目。使用标签observe_field,我将文本键入文本区域,在控件中处理它,并在div中显示结果(非常类似于堆栈溢出中的预览)。一切正常,直到我输入某些特殊的字符。

  1. ? =>导致变量在params对象中找不到
  2. (pound)=>导致无效的真实性错误
  3. %=>阻止div更新
  4. &安培; =>和&之后的所有事情不再传递到服务器上的变量。
  5. 有没有办法解决这个问题?

    ---代码示例---

    这是观点。 ('postbody'是文本区域)

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

    这是名为

    的控制器
    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 
    

    这是创建的javascript:

    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')})})
    

3 个答案:

答案 0 :(得分:3)

这是一个逃避问题(正如其他人所说)。

您需要将observe_field:with语句更改为:

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

然后在你的控制器中:

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

答案 1 :(得分:0)

您能提供代码示例吗?

更有可能你只需要使用encodeuri或类似的东西来逃避你的HTML实体。

答案 2 :(得分:0)

生成的Javascript是什么样的?

听起来(乍一看)就好像它没有被逃脱。