- Баг в subject'ами писем, Maxim Chirkov, 12:06 , 11-Апр-06 (1)
Для кодирования у меня используется Perl модуль MIME::Words. Сейчас посмотрел, а в одном месте вместо "encode_mimewords" написано "encode_mimeword", поправил.
- Баг в subject'ами писем, dev, 12:15 , 11-Апр-06 (2)
>Для кодирования у меня используется Perl модуль MIME::Words. Сейчас посмотрел, а в >одном месте вместо "encode_mimewords" написано "encode_mimeword", поправил. Тот глюк исчез, но теперь он кодировку неправильную подставил: Subject: =?ISO-8859-1?Q?=E2=C1=C7?= =?ISO-8859-1?Q?=D7?= subject'=?ISO-8859-1?Q?=C1=CD=C9?= =?ISO-8859-1?Q?=D0=C9=D3=C5=CD?=
- Баг в subject'ами писем, Maxim Chirkov, 13:22 , 11-Апр-06 (3)
>Тот глюк исчез, но теперь он кодировку неправильную подставил: Исправил.
- Баг в subject'ами писем, dev, 13:27 , 11-Апр-06 (4)
>>Тот глюк исчез, но теперь он кодировку неправильную подставил: > >Исправил. Еще один остался: Subject: =?KOI8-R?Q?=E2=C1=C7?= =?KOI8-R?Q?=D7?= subject'=?KOI8-R?Q?=C1=CD=C9?= =?KOI8-R?Q?=D0=C9=D3=C5=CD?= Показывается как: Багвsubject'амиписем Пробелы должны явно входить в токен как подчеркивания, т.к. по RFC рядом стоящие токены склеиваются.
- Баг в subject'ами писем, Maxim Chirkov, 16:37 , 11-Апр-06 (5)
>Показывается как: >Багвsubject'амиписем >Пробелы должны явно входить в токен как подчеркивания, т.к. по RFC рядом >стоящие токены склеиваются. Хм, обновил версию модуля MIME::Words, все равно поведение с пробелами не изменилось. Почитал RFC, там действительно определено что пробелы между закодированными блоками не отображаются, а между закодированным и не закодированным - вставляются. Получается проблема в MIME::Words, попытаюсь найти альтернативный модуль соблюдающий стандарт. PS. Посмотрел пару webmail на перл, там таже проблема.
- Баг в subject'ами писем, dev, 12:51 , 12-Апр-06 (6)
>Хм, обновил версию модуля MIME::Words, все равно поведение с пробелами не изменилось. Угу, у него и в документации написано, что не полностью соответствует. >Почитал RFC, там действительно определено что пробелы между закодированными блоками не отображаются, >а между закодированным и не закодированным - вставляются. Получается проблема в >MIME::Words, попытаюсь найти альтернативный модуль соблюдающий стандарт. > >PS. Посмотрел пару webmail на перл, там таже проблема. Накидал такую функцию, мои тесты она проходит. Лицензия - "все_пофиг" :) #!/usr/local/bin/perl use strict; use vars; sub rfc2047conv { my $str = shift; # чего кодировать my $charset = uc(shift); # какую кодировку приписать my $init_len = shift || 0; # длина того, что планируется добавить потом в начало строки my $len = length($str); return '' unless($len); my $begin = "=?$charset?Q?"; my $res = $begin; my $count = $init_len + length($begin); foreach my $c (split(//, $str)) { my ($repl, $repl_len); if($c eq '?' || $c eq '_' || $c eq '=' || $c lt ' ' || $c gt '~') { $repl = sprintf("=X", ord($c)); $repl_len = 3; } elsif($c eq ' ') { $repl = '_'; $repl_len = 1; } else { $repl = $c; $repl_len = 1; } if($count + $repl_len > 72) { $res .= "?=\r\n " . $begin; $count = 1 + length($begin); } $res .= $repl; $count += $repl_len; } $res .= '?='; return $res; } printf("[%s]\n", rfc2047conv("some very very long test subject = длинный тестовый сабжект", 'KOI8-R', length('Subject: ')));
- Баг в subject'ами писем, Maxim Chirkov, 13:54 , 13-Апр-06 (7)
>Накидал такую функцию, мои тесты она проходит. Лицензия - "все_пофиг" :) Добавил ее вместо MIME::Words. - Баг в subject'ами писем, Andrey, 15:58 , 06-Окт-06 (8)
огромное спасибо автору функции искал именно что-то подобное и нашел в этом форуме
- Баг в subject'ами писем, Akzhan, 17:28 , 28-Дек-07 (9)
>огромное спасибо автору функции >искал именно что-то подобное и нашел в этом форуме Проще взять из CPAN модуль MIME::AltWords. Там попутно и другие ошибки поправлены.
- заметил небольшой глюк в rfc2047conv, dimedrol, 10:48 , 11-Июн-09 (10)
Спасибо автору! Полезная функция. Но в процессе эксплуатации заметил, что при переносе длинных строк, символы на границе строк могут быть перенесены некорректно, иногда разбиваются по середине, и пол символа остается на одной строке, а вторая половина переносится на следую строку. Например, у меня была строка, в которой было слово 'найдено', и вот, как оно разбилось на части. Буква 'д' , после кодирования должна превращаться в '=D0=B4' . Так вот '=D0' осталось на одной строке, а '=B4' перенеслось на следующую, и как следствие, при чтении этого письма в почтовом клиенте, вместо буквы д были два знака вопроса......=D0=BD=D0=B0=D0=B9=D0?= =?UTF-8?Q?=B4=D0=B5=D0=BD=D0=BE=A?=
|