Поздравляю! Вы попали в архивный блог! Все новые материалы публикуются на hmdw.meX
Просмотров: 1890

TheBugGenie и htmlentities 'Invalid Multibyte Sequence' error

При переносе багтрекера на другой сервер возникла проблема с возникновением ошибки htmlentities 'Invalid Multibyte Sequence' error в файле common.php (276 строчка). Возможно проблема возникла из-за разных настроек кодировки MySQL на двух серверах, хотя при переносе все возможные мелочи были учтены.

Сидеть и колдовать с настройками не было никакого желания, тем более как выяснилось проблема затрагивает лишь русские названия дат, остальные же данные отображаются так как нужно.

А дело все в том что названия дат отдавались функции htmlentities не в utf-8, а последний параметр в этой функции имеет значение как раз таки utf-8.

После добавки этой строчки перед вызовом htmlentities все заработало.

$tstring = iconv("ISO-8859-5","UTF-8",$tstring);

Но как выяснилось рано я радовался, новые записи в багтрекере отдавали дату уже в utf-8 и при двойной перекодировке отдавали кракозябры. Тогда же был придуман костыль для корректной работы и для старых и для новых записей.

Итак, заместо 276 строчки вставляем:

if(mb_check_encoding($tstring,"UTF-8")!=true) {
$tstring = iconv("ISO-8859-5","UTF-8",$tstring);
}
		return htmlentities($tstring, ENT_COMPAT, TBGContext::getI18n()->getCharset());

А вообще костыли это зло, но иногда таки приходится их додумывать. Если у читателей есть более правильное решение пожалуйста пишите в комментариях =)

twitter.com facebook.com vkontakte.ru odnoklassniki.ru livejournal.ru yandex.ru
Теги: ,
Эта запись опубликована: Четверг, 13 сентября 2012 в рубрике Web-разработка.

Оставьте комментарий!