1

私はレールプロジェクトに取り組んでいます。タグ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 に答える