2011-01-21 2 views
3

私はプラグインのメソッドの1つで返された以下のjs(文字列リテラルで)を持っています。だから私はこのメソッドを呼び出すとき、これを私の見解に置きます。問題はウェブサイト上にあり、<, ", ', >などはすべて&lt;, &quot;などにエスケープされています。これどうやってするの?私はさまざまな方法を試してみたが、どれも動作するようですありません:私はこのプラグインは、一種の古いので、これはRailsの以前のバージョンで可能だったかもしれないと思う/ ...Rubyでjavascriptをアンファイルする.rbファイル/ ruby​​のメソッドでjsを返す

%Q{<script type="text/javascript"> 
    $(function() { 
     $('#{table_dom_id}').dataTable({ 
      "oLanguage": { 
      "sSearch": "#{search_label}", 
      #{"'sZeroRecords': '#{no_records_message}'," if no_records_message} 
      "sProcessing": '#{processing}' 
      }, 
      "sPaginationType": "full_numbers", 
      "iDisplayLength": #{per_page}, 
      "bProcessing": true, 
      "bServerSide": #{server_side}, 
      "bLengthChange": false, 
      "bStateSave": #{persist_state}, 
      "bFilter": #{search}, 
      "bAutoWidth": #{auto_width}, 
      #{"'aaSorting': [#{sort_by}]," if sort_by} 
      #{"'sAjaxSource': '#{ajax_source}'," if ajax_source} 
      "aoColumns": [ 
       #{formatted_columns(columns)} 
        ], 
      #{"'fnRowCallback': function(nRow, aData, iDisplayIndex) { #{row_callback} }," if row_callback} 
      "fnServerData": function (sSource, aoData, fnCallback) { 
      aoData.push(#{additional_data_string}); 
      $.getJSON(sSource, aoData, function (json) { 
        fnCallback(json); 
       }); 
      } 
     })#{append}; 
    }); 
    </script>} 

すべてのヘルプは高く評価され、感謝!

答えて

4

これはかなり頻繁に尋ねられます。

  1. <%= 'string'.html_safe %>
  2. <%= raw 'string' %>

それはより柔軟だから最初はほとんどの場合において好ましい:あなたは、文字列の2つの方法のいずれかを逃れるためではないのRailsに伝える必要があります。たとえば、文字列が定義されているときにその文字列をHTMLセーフとしてマークしたり、何かを変更したりすると自動的に安全でないとマークされます。これは、誤って悪用するまで自分自身を開かないようにするのに適しています。

だが、このコードを何らかのビューに移動することをお勧めします。メソッドに出力することを避ける必要があります。ヘルパーの場合、制限された出力コードが最適です(通常はスニペットのみです)。

+0

ありがとうございました!ええ、理想的には他の場所にあるでしょうが、プラグインを可能な限り少しでも変更しようとしています:) – butterywombat

0

XSS攻撃を防ぐため、Railsは自動的にHTMLをエスケープします。あなたはまた、同様にいずれかの方法でhtml_safeを使用することができます

# Provided that my_escaped_string is what you want to display 
<%= my_escaped_string.html_safe %> 
<%= raw my_escaped_string %> 

:2つのオプションを持っています。

+0

ありがとう!申し訳ありません前に男の秒に私の投票を与える必要があります:( – butterywombat

関連する問題