При переносе багтрекера на другой сервер возникла проблема с возникновением ошибки 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());
А вообще костыли это зло, но иногда таки приходится их додумывать. Если у читателей есть более правильное решение пожалуйста пишите в комментариях =)
- Вперед
- Назад