julik live

Заапгрейд

Заапдейтились на MT 3.3 Как ни странно, в новой версии поменялась поддержка кодировок (потому что японцы требуют). В результате появилось несколько хороших вещей, которые как водится компенсируются кривыми руками реализаторов.


Наконец-то до них дошло. Другое дело, что MT прямо когда вы решите апгрейдится будет угадывать этот параметр из установки вашей базы данных, но никак не из вашего MTPublishCharset. Напомним читателям, что оная установка творится в MySQL так:

ALTER DATABASE foobar DEFAULT CHARACTER SET utf8;

А хитрость тут вот в чем. Если таблицы у вас установлены в utf8, а база - во что-нибудь еще (например в latin1) MT прямо при запуске mt-upgrade.cgi убьет добрую половину вашей базы к чертовой матери. Ценные тексты будут вытянуты из базыи честно отконвертированы в вопросики - посмертно.

Будет нерадостно.

Следовательно - какой бы у вас ни был блог, проверьте что кодировка вашей базы соответствует вашему MTPublishCharset. И сделайте это до апгрейда базы.

А вот вторая свинья будет похлеще. Как всегда доводку напильником надо делать самим - потмоу что они видите ли оптимизировали. Быстро лезьте в MT/ObjectDriver/DBI/mysql.pm

sub _set_names {
   ...
   return 1 if exists $driver->{set_names};

и уберите нафиг строчку с return. Почему? Очень просто. Товарищи решили, что если один раз SET NAMES выполнен - делать это снова не нужно. Боль - при каждом повторном соединении с базой SET NAMES надо делать опять, а когда повторное соединение произойдет - не знает никто. Например, если MT работает в FCGI-режиме, драйвер будет отсоединен по таймауту секунд через 30 - и первый же комментатор установит соединение уже без SET NAMES. А поскольку на переменной флажок уже проставлен - повторно SET NAMES никто не выполнит. И будут опять вопросики (а если в этот момент редактируют что-нибудь - текст отредактированного из вопросиков же и будет состоять, текст уничтожен).

Попутно японцы явно желают получать иероглифы на почту в кодировках, отличных от PublishCharset - и бог им в помощь! По умолчанию параметр MailEncoding ставится в PublishCharset - только из-за какой-то странной пробуксовки это не работает (это и есть свинья). Поэтому вы будете получать свежие комментарии на свою почту, предусмотрительно перекодированные в ISO-8859-1. В этой кодировке нету ни одной русской буквы, следовательно комментарии вы получите из вопросиков.

Поэтому в mt.cfg спокойно надо пробить:

MTPublishCharset utf-8 # у вас он уже был, это я так - напоминаю
SQLSetNames 1 # если у вас MySQL 4.1 и выше
MailEncoding utf-8 # надо!

Перекодировка трекбеков

А вот это радует - теперь функционал TrackDecode вроде как встроен в сам MT. Другое дело что при "угадывании" кодировки koi-8 и cp-1251 не фигурируют, так что что там будет с вашими трекбеками - неизвестно. Видимо трекбеки без отправленного заголовка Charset будут просто восприняты как PublishCharset.

И не по теме (но тоже полезно) - обязательно пользуйтесь Akismet. Реализации доступны для большого количества блог-движков, а эффективность поражает - фильтруется 99 процентов спама, как в пингах, так и в комментариях.

Suspects: Юникод

 
comments powered by Disqus

Aspirine not included.