September 13, 2012

TheBugGenie и htmlentities 'Invalid Multibyte Sequence' error

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

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

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

<?php
//...

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

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

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

<?php
//...

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

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

Другие проекты:

telegram-catalog.top

rhamdeew © 2020