0

Ich habe kürzlich versucht, meine Ansichten zu aktualisieren und den Vanilla-Stern "*" zu ersetzen, der einen Stern mit dem schwarzen Unicode-Stern darstellen sollte. " ★ "(U + 2605," & # x2605 ";" & # 9733 "; 0xE2 0x98 0x85 (e29885)). Alles schien gut zu funktionieren, als ich das Zeichen in einer Zeichenfolge in den entsprechenden Ansichten hinzufügte. Eine dieser Ansichten ist unten gezeigt.Unicode-Zeichen in der Rails-Ansicht, die dazu führt, dass edelstein rack-google-analytics fehlschlägt

_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)}★" 

Ich veröffentlichte das Update und ging mit meinem Geschäft. Ein paar Tage später überprüfte ich Google Analytics, um zu sehen, wie Traffic auf die Website geleitet wurde, und ich bemerkte einen steilen Rückgang auf fast Null. Ich habe etwas überprüft, da ich wusste, dass während dieser Zeit sehr viel Traffic auf die Seite kam und dass etwas mit meinem Google Analytics-Code nicht stimmte. Als ich mir den Quellcode für die Seite in der Produktion angeschaut habe, habe ich Folgendes gesehen.

<--! ...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 

Es scheint, dass das von den Unicode-Zeichen verbrauchen zusätzliche Bytes für nachgewiesenes war, so dass sie effektiv die Unterseite meiner Seite aßen, so dass es abrupt zu beenden. Was ich gesehen haben sollte war, dass das Skript-Tag beendet wurde, genauso wie das Ende des Body- und HTML-Tags.

<--! ... 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> 

ich auf die vorherige Änderung von git zurückgekehrt (der Ersatz von Sternchen mit Sternen war die einzige Änderung in dem betreffenden Festschreibung), und mein Google Analytics-Tracking-Code funktioniert wieder in Ordnung, und mein Skript, Körper und html Tags haben alle ihre richtigen schließenden Tags.

Meine Frage ist zweifach.

  1. Wie füge ich das Sternzeichen zurück in meine Ansicht, ohne das Ende meines Codes aufzufressen?
  2. Ich dachte UTF-8 wurde in Rails 3.1 out of the box unterstützt, warum passiert das?

Antwort

1

Ich habe dieses Problem nicht mit Google Analytics insbesondere darin zu sehen, aber in der Regel werden Sie Fehler, wenn Sie Ihre Rails-Quelldateien Unicode-Zeichen erhalten enthalten, ohne die an der Spitze

# encoding: UTF-8 

Leitung. Überprüfen Sie, ob Ihre HAML-Datei tatsächlich als UTF-8 kodiert ist und nicht etwas Ungewöhnliches wie UTF-16 oder ein Nicht-Unicode-Format. Fügen Sie dann dieses Tag an die Spitze und sehen Sie, ob das das Problem löst. Sie können auch versuchen, Haml :: Template.options [: encoding] = "utf-8" in Ihrer Umgebung zu setzen. Rbb - afaik sollte der Standard sein, kann aber irgendwo überschrieben werden.

Rails 3.1 unterstützt Unicode out-of-the-box, toleriert aber kein Unicode innerhalb seines Codes, es sei denn, Sie fragen es. Beachten Sie außerdem, dass einige Datenbanktreiber Unicode noch immer nicht vollständig unterstützen.

+0

Leider keiner von ihnen hat dazu beigetragen. –

0

Nachdem ich meinen Kopf ein paar Tage an die Wand geschlagen und einige Variationen von "encoding: UTF-8" in fast jede Datei in meiner Rails App eingefügt hatte, entschied ich mich für den HTML Code &#x2605. Zuerst ging ich zum treuen HTML2HAML converter. Es wurde gesagt, dass der HTML-Code &#x2605 zu \★ in haml konvertiert. Also habe ich das versucht und eine kleine ISE-Nachricht bekommen. Ich habe ein paar andere Varianten ausprobiert, bis ich schließlich auf eine Lösung gestoßen bin.

Ich schuf eine erb basierte teilweise _star.html.erb, die ich aus meiner _recent_updates.html.haml Datei speziell aufgerufen, um den Stern zu machen.Sobald ich das getan hatte, klärte sich alles und wirkte wie ein Zauber.

Ich bin mir immer noch nicht sicher, was mit dem Haml vor sich ging, aber ich hoffe, dass jemand, der schlauer ist als ich, es herausfinden kann.

Letzte Zeile aktualisiert:

_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 

Mein neuer Teil

_star.html.erb 
<%= "#{display_star(rc.player.vc_star_rating)}" %>&#x2605; 
Verwandte Themen