The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Perl функция для quoted-printable кодирования в соответствии с RFC2047
Популярный Perl модуль MIME::Words  не обеспечивает quoted-printable кодирование 
в полном соотвтетвии с  RFC2047 (пробелы между двумя закодированными блоками недопустимы).

# rfc2047conv (строка, кодировка, размер префикса);
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("проверка ", 'KOI8-R', length('Subject: ')));
 
13.04.2006 , Автор: dev , Источник: http://www.opennet.ru/openforum/vsl...
Раздел:    Корень / Программисту и web-разработчику / Perl / Полезные подпрограммы на Perl / Работа с сетью и IP адресами на Perl

Обсуждение [ RSS ]
 
  • 1, Stanislaus, 01:38, 11/02/2009 [ответить] [смотреть все]
  • +/
    Еще стоит взглянуть на Encode::MIME::Header, который позволяет производить эти манипуляции так:    
    use Encode qw/encode decode/;
    $utf8   = decode('MIME-Header', $header);
    $header = encode('MIME-Header', $utf8);

    правда только для UTF-8, но обычно больше ничего и не нужно. Главное, что бы хорошо работало. Использовать MIME::Words из MIME::Tools не советую.

     
     
  • 2, dimedrol, 10:08, 12/06/2009 [^] [ответить] [смотреть все]
  • +/
    Спасибо автору!
    Полезная функция. Но
    в процессе эксплуатации заметил, что при переносе длинных строк, символы на границе строк могут быть перенесены некорректно, иногда разбиваются по середине, т.е. половина символа остается на одной строке, а вторая половина переносится на следую строку. Например, у меня была строка, в которой было слово 'найдено', и вот, как оно разбилось на части.
    Буква 'д' , после кодирования должна превращаться в '=D0=B4' . Так вот '=D0' осталось на одной строке, а '=B4' перенеслось на следующую, и как следствие, при чтении этого письма в почтовом клиенте, вместо буквы д были два знака вопроса.

    .....=D0=BD=D0=B0=D0=B9=D0?=
    =?UTF-8?Q?=B4=D0=B5=D0=BD=D0=BE=A?=

    Stanislaus писал:
    >Еще стоит взглянуть на Encode::MIME::Header,

    ...

    Я пробовал Encode::MIME::Header. Он у меня вообще не заработал:
    https://rt.cpan.org/Public/Bug/Display.html?id=46832

     
  • 3, nm11, 22:42, 05/05/2010 [ответить] [смотреть все]
  • +/
    спасибо пригодилось
    для отправки смс через e-mail
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:

     Добавить заметку
     Версия для печати
     
     Поиск заметки:
     

    Последние заметки
    - 05.02 Проброс 802.1q/access порта в Linux через IP-сеть
    - 25.01 Использование systemtap для устранения уязвимости в реализации /proc/pid/mem
    - 24.01 Мониторинг загрузки многоядерного сервера по каждому ядру в отдельности в Linux
    - 23.01 Осуществление ОGSM/SMS/USSD вызовов с использованием утилиты mdbus
    - 13.01 Интерактивный firewall в Linux
    - 08.01 Советы по увеличению автономной работы ноутбука с Debian/Ubuntu
    - 31.12 Бэкап и восстановление данных из БД memcachedb и других хранилищ на базе BerkeleyDB
    - 28.12 Получение инкрементальных diff-файлов для subversion
    - 27.12 Решение проблемы поддержки php-zip-extension в Fedora-16
    - 25.12 Настройка сетевого доступа в окружениях QEMU
    RSS | Следующие 15 записей >>


    АКЦИЯ! ПОДПИШИСЬ на журнал Linux Format до 31 января 2012 года и выиграй СУПЕРПРИЗ!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Подробнее о проведении акции вы можете прочитать на странице сайта.


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList