web-dev-qa-db-ja.com

エスケープ文字列-出力Rails JavaScriptの文字列

次のように、.erbファイルのJavaScriptオブジェクトに文字列値を割り当てようとしています。

var data = {
    'name': '<%= @product.name %>',
    ...
};

問題は、nameの値がTom's small earsの場合、

data.nameの出力はTom&#x27;s small earsになります。

特殊文字をエスケープする方法はありますか?

'name': '<%= raw @product.name %>'を実行してみましたが、Uncaught SyntaxError: Unexpected identifierがコンソールに出力されます。

実行中<%= escape_javascript @product.name %>出力Tom\&#x27;s small ears

編集MrYoshiji's回答の下の@Stefanのコメントが役に立ちました。

22
cclerv

escape_javascript()を使用してそれを実現できます。

var data = {
    'name': "<%== escape_javascript @product.name %>",
    #...
};

リンク: http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript

このメソッドのエイリアスはjです。

 var data = {
     'name': "<%== j @product.name %>"
 }
36
MrYoshiji
var data = {
   'name': '<%=j @product.name.html_safe %>',
   ...
};
0
Hooopo