0

最近、私のビューの更新を試みていましたが、星を表すためのバニラアスタリスク "*"文字を、 ★ "(U + 2605、" &#x2605 ";" &#9733 "; 0xE2 0x98 0x85(e29885))。適切なビューの文字列に文字を追加すると、すべてがうまくいくように見えました。そのようなビューの1つを以下に示します。REMOTEビューのUnicode文字が原因でGemラック・グーグル・アナリティクスが失敗する

_recent_updates.html.haml 
%table.tablesorter#home 
    %thead 
    %tr#header 
     %th#year Year  
     %th#name Player Name 
     %th#position Position 
     %th#school School 
     %th#stars Stars 
    %tbody 
    - @recent_commits.each do |rc| 
     %tr{:class => cycle("odd", "even")} 
     %td#class= rc.player.year 
     %td#name= link_to display_name(rc.player), player_path(rc.player.slug) 
     %td#position= Position.find(rc.player.position_id).abbr if rc.player.position_id 
     %td#school= link_to rc.school.name, school_path(rc.school.slug) 
     %td#stars= "#{display_star(rc.player.vc_star_rating)}★" 

私はこのアップデートをリリースし、私のビジネスに合っていました。数日後、Googleアナリティクスでトラフィックがどのようにサイトに送られているかを確認しました。私は、この期間中にサイトに大量のトラフィックがあったことを知っていたので、いくつかのチェックを行い、Google Analyticsのコードに問題があることに気付きました。プロダクションのページのソースコードを見ると、ここに私が見たものがあります。

<--! ...My Page Contents --> 


<script type="text/javascript"> 
if (typeof gaJsHost == 'undefined') { 
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); 
} 
</script> 
<script type="text/javascript"> 
try { 
var pageTracker = _gat._getTracker("UA-XXXXXXXX-1"); 
pageTracker._trackPageview(); 
} catch(err) {}</scr 

彼らが効果的にそれが突然終了させ、私のページの一番下を食べたように、Unicode文字で消費される余分なバイトが行方不明だったことが表示されます。私が見ていたはずのことは、スクリプトタグが終了しているはずで、bodyタグとhtmlタグの終わりです。

<--! ... My Page Contents --> 


<script type="text/javascript"> 
if (typeof gaJsHost == 'undefined') { 
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); 
} 
</script> 
<script type="text/javascript"> 
try { 
var pageTracker = _gat._getTracker("UA-XXXXXXXX-1"); 
pageTracker._trackPageview(); 
} catch(err) {}</script> 
</body> 
</html> 

私は(星とアスタリスクの交換は、問題のコミットの変化だけだった)のgitから、前の変更に戻し、そして私のGoogle Analyticsのトラッキングコードが再び正常に動作し、私のスクリプト、身体とhtmlタグはすべて適切な終了タグを持っています。

私の質問は2倍です。

  1. は、どのように私は私のコードの末尾を食べずに私のビューに戻すスターの文字を追加するには?
  2. 私は、UTF-8がRails 3.1でそのままサポートされていると思ったのですが、なぜこれが起こっていますか?

答えて

1

私は特に、Googleアナリティクスでこの問題を見ていないが、あなたのRailsのソースファイルが上部に

# encoding: UTF-8 

ラインを持たずにUnicode文字を含んでいる場合、一般的に、あなたは、エラーが発生します。あなたのHAMLファイルが実際にUTF-8としてエンコードされていて、UTF-16や非ユニコード形式のような奇妙なものではないことを再確認し、このタグを先頭に追加して問題が解決するかどうか確認してください。 environment.rb - afaikでHaml :: Template.options [:encoding] = "utf-8"を設定してみてください。これはデフォルトにする必要がありますが、どこかで上書きすることができます。

Rails 3.1は、そのままの状態でUnicodeをサポートしますが、あなたが要求しない限り、そのコード内でUnicodeを許容しません。また、一部のデータベースドライバではまだUnicodeを完全にサポートしていないことに注意してください。

+0

残念ながら、これらのどちらもが支援してきました。 –

0

私の頭を壁にぶつけて数日後、Railsアプリケーションのほぼすべてのファイルに "encoding:UTF-8"のバリエーションを追加した後、htmlコード&#x2605を使ってみることにしました。まず、私は信頼できるHTML2HAML converterに行きました。それはhtmllのが\★に変換されたということです。だから私はそれを試み、不快な小さなISEメッセージを得ました。ついに私は解決策を見つけ出すまで、いくつかのバリエーションを試しました。

erbベースの部分_star.html.erbを作成しました。これは私の_recent_updates.html.hamlファイルから特にスターをレンダリングするために呼び出されました。私がそれをしたら、すべてがクリアされ、魅力のように働いた。

私はまだハムと何が起こっていたのか分かりませんが、私よりもスマートな人がそれを理解できることを願っています。更新

最終ライン:

_recent_updates.html.haml 
%table.tablesorter#home 
    %thead 
    %tr#header 
     %th#year Year  
     %th#name Player Name 
     %th#position Position 
     %th#school School 
     %th#stars Stars 
    %tbody 
    - @recent_commits.each do |rc| 
     %tr{:class => cycle("odd", "even")} 
     %td#class= rc.player.year 
     %td#name= link_to display_name(rc.player), player_path(rc.player.slug) 
     %td#position= Position.find(rc.player.position_id).abbr if rc.player.position_id 
     %td#school= link_to rc.school.name, school_path(rc.school.slug) 
     %td#stars 
      = render 'star', :rc => rc 

私の新しい部分

_star.html.erb 
<%= "#{display_star(rc.player.vc_star_rating)}" %>&#x2605; 
関連する問題