2012-03-13 19 views
11

私はすべてを試しました。ヘルパーのすべての組み合わせraw::JSON.encodeCGI.unescapeでいくつかの試みが含まれています。問題は、私が何をしているかに関係なく、整形式のJSONをビューで印刷できないということです。常にHTMLがエスケープされます。有効なエスケープされていないJSONをRailsビューで表示します

はここに私のビューのコードです:私の場合は

var campaignData<%= "=" + (raw @campaign.to_json) if @campaign %>;

、それは常に"ようにエスケープされている引用符です。私は単に引用符でgsubを行うだろうが、それはIMOが非常にシンプルでよく文書化されたユースケースでなければならないものに対するひどい解決策である。

答えて

30

でこれを試してみてください。安全でないと考えられるので、もう一方の文字列を汚します。

おそらくいずれかを実行することができますほぼ同じです

raw("=" + @campaign.to_json) 

または

"= #{@campaign.to_json}".html_safe 

+1

これは安全ではありません。 jsonにより小さい文字列が含まれている場合はどうなりますか?これをスクリプトタグに入れると、誰かが終了スクリプトタグを注入して、任意のコードで新しいスクリプトタグを開始することができます。 json文字列を 'json_escape'にラップする必要があります。しかし、その機能は最近まで壊れていた(レール4.1)。 – Kelvin

+0

はい、私もこれが私のために動作しなかったことが判明したときに@campaign == "" – hrdwdmrbl

+0

THANKS A TON !!! –

5

あなたはescape_javascriptを試しましたか?

ここでは、* .hamlファイルの例を示します。これは私の答えをテストするために追加したものです。 jescape_javascriptための短いエイリアスである

:javascript 
    var foo=$.parseJSON("#{j @albums.to_json}") 

+0

いやを、行うことができました2.3.3以来。今は、私が必要とするそれぞれの価値を手作業で印刷しているだけです。これはひどい解決策ですが、それを実現させる唯一の方法です。 –

+0

エスケープされた文字列をここに貼り付けることができますか?また、どのバージョンのルビーとレールを使用していますか? – cutalion

+0

それが間違っているのだろうかと疑問に思ったのは、引用符がHTMLの引用エンティティ '" 'に置き換えられた点を除いて、有効なJSONでした。Rails 3.2.1の使用 –

0

は、ここでの問題は、 "=" 文字列であるutility method

var campaignData<%=h " =#{raw @campaign.to_json}" if @campaign %>; 
9

activesupportのは、あなたが動作しませんでした.as_json

関連する問題