18 марта, 2012

GLPI: неправильная кодировка при обработке почты.

После начала использования GLPI в качестве Helpdesk всплыл весьма неприятный баг: часть обращений (тикетов) импортировались в неправильной кодировке. С первого взгляда «плохие» письма ничем не выделялись.

Тут нужно отметить, что мы используем Gmail-аккаунт. Только после отладки, стало понятно, что в «плохом» случае Gmail отдаёт тему письма в KOI8-R, а тело в UTF-8. В этой ситуации в коде GLPI происходит вызов iconv с параметрами ('KOI8-R' -> 'UTF-8').

Что же, воспроизведённый баг - половина патча. Приведённый ниже патч проработал у меня полтора месяца, проблем не выявлено.

--- inc/mailcollector.class.php.orig      2012-01-30 00:08:25.000000000 +0400
+++ inc/mailcollector.class.php   2012-01-30 01:29:35.000000000 +0400
@@ -955,6 +955,11 @@
                      $text = mb_convert_encoding($text, 'utf-8',$param->value);
                      $this->body_converted=true;
                   }
+                  if ((strtoupper($param->attribute)=='CHARSET')
+                      && function_exists('mb_convert_encoding')
+                      && strtoupper($param->value) == 'UTF-8') {
+                     $this->body_converted=true;
+                  }
                }
             }
             return $text;

P.S. Разработчикам отписал

1 комментарий: