1

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

  1. ? => 导致在 params 对象中找不到变量
  2. (磅) => 导致无效的真实性错误
  3. % => 停止更新 div
  4. & => & 之后的每一件事都不再传递到服务器上的变量中。

有没有办法解决这个问题?

--- 代码示例 ---

这是视图。(“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')})})
4

3 回答 3

3

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

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

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

然后在你的控制器中:

def textile_to_html
  text = URI.unescape(params['postbody'])
  ...
于 2008-11-13T18:43:57.747 回答
0

你能提供一个代码示例吗?

您很可能只需要使用encodeuri或类似的东西来转义您的 HTML 实体。

于 2008-08-28T01:00:24.543 回答
0

生成的 Javascript 是什么样的?

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

于 2008-09-01T06:37:45.247 回答