21 сентября 2009 г.

egroupware 1.6.002 tracker и русские буквы

Это небольшой патчик к тракеру, позволяющий считывать русские буквы из сабджекта письма.
Заодно, он позволяет корректно читать тело письма, содержащего русские буквы (при условии, что письмо было в UTF-8). Хотя вопросом чтения тела письма в других кодировках надо бы заняться по плотнее.


diff old/class.tracker_mailhandler.inc.php new/class.tracker_mailhandler.inc.php
213,215c213,215
< if ($struct->subtype == 'PLAIN') {
< $body = utf8_decode ($body);
< }
---
> // if ($struct->subtype == 'PLAIN') {
> // $body = utf8_decode ($body);
> // }
232a233,246
>
> function parse($matches) {
>
> if ($matches[2] == "q" || $matches[2] == "Q") {
> return strtr(iconv($matsches[1],"UTF-8",quoted_printable_decode ($matches[3])),"_"," ");
> }
> elseif ($matches[2] == "b" || $matches[2] == "B") {
> return strtr(iconv($matches[1],"UTF-8",base64_decode ($matches[3])),"_"," ");
> }
> else {
> return $matches[3];
> }
> }
>
240,245c254
< $header = preg_replace_callback('/=\?(.*)\?([BQ])\?(.*)\?=/U', create_function (
< '$matches',
< 'if ($matches[2] == "q" || $matches[2] == "Q") { return quoted_printable_decode ($matches[3]); } ' .
< 'elseif ($matches[2] == "b" || $matches[2] == "B") { return base64_decode ($matches[3]); } ' .
< 'else { return $matches[3]; } '
< ), $header);
---
> $header = preg_replace_callback('/=\?(.*)\?([BQ])\?(.*)\?=/U', array($this,'parse'), $header);


Я PHP совсем не знаю, поэтому плиз не кидаться камнями и бананами. Если есть решение лучше, буду рад применить его :)

Еще одна проблема, возникшая при обработке писем, это неправильная реакция на ответы на письмо тракера, когда неправильно обрабатываются письма с Re: в начале. Будет время, постараюсь раскопать эту тему тоже.
Отправить комментарий