Недавно я пытался обновить мои представления и заменить символ звездочки "*" ванили, который должен был представлять звезду с черной звездой в юникоде "★" (U + 2605, "★"; "★"; 0xE2 0x98 0x85 (e29885)).Казалось, все работает отлично, когда я добавляю персонажа в строку в соответствующих представлениях.Одно из таких представлений показано ниже.
_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 Analytics, чтобы увидеть, как трафик идет на сайт, и заметил резкое падение почти до нуля.Я провел некоторую проверку, так как знал, что в этот период времени на сайт было много трафика, и понял, что с моим кодом 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, были пропущены, так что они фактически съели дномоя страница, в результате чего она внезапно заканчивается.Что я должен был увидеть, так это то, что тег сценария должен был заканчиваться, а также конец тела и теги 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 снова работает нормально, и все мои теги script, body и html имеют свои закрывающие теги.
У меня вопрос в два раза.
- Как мне добавить звездный символ обратно в мое представление, не съедая конец моего кода?
- Я думал, UTF-8 была поддержана из коробки в Rails 3.1, так почему это происходит?