За последние 24 часа нас посетили 15113 программистов и 1761 робот. Сейчас ищет 1541 программист ...

Кодировка тела письма

Тема в разделе "Работа с почтой", создана пользователем solyr, 22 фев 2012.

  1. solyr

    solyr Активный пользователь

    С нами с:
    22 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    При получении письма с сервера не получается получить тело письма в нужной кодировке. Вроде как отправлял в кодировке Win-1251, но при обработке входящей корреспонденции выдается билиберда.
    Функция iconv_mime_decode($body[Key($body)],0, "WINDOWS-1251") не дает нужный результат.
    Строки 0, 2, 4, 5 непонятны. Как правильно раскодировать тело письма?

    Код (Text):
    1. Подключились к узлу 192.168.213.1! - pop сервер
    2. Общий объем - 4563 байт.
    3. Сообщение: 1 | От: "test2" | Кому:  | Тема: тест | 1126 байт.
    4. Строка: 0 =C7=E4=F0=E0=E2=F1=F2=E2=F3=E9=F2=E5, Test.
    5. Строка: 1
    6. Строка: 2 =F2=E5=F1=F2
    7. Строка: 3
    8. Строка: 4 --=20
    9. Строка: 5 =D1 =F3=E2=E0=E6=E5=ED=E8=E5=EC,
    10. Строка: 6 test2 mailto:test2@test.loc
    11. Строка: 7
    12. Строка: 8
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Расшифровал:

    Код (PHP):
    1. <?php
    2. function getIntVal($char) {
    3.     if(is_numeric($char))
    4.         return((int) $char);
    5.     else
    6.         return(10 + (ord($char) - ord('A')));
    7. }
    8. header('Content-type: text/html; charset=Windows-1251');
    9. $str = '=C7=E4=F0=E0=E2=F1=F2=E2=F3=E9=F2=E5';
    10. $chars = explode('=', $str);
    11. array_shift($chars);
    12. $str = '';
    13. foreach($chars as $char) {
    14.     $first = getIntVal(substr($char, 0, 1));
    15.     $second = getIntVal(substr($char, 1, 1));
    16.     $charCode = $first * 16 + $second;
    17.     $str .= chr($charCode);
    18. }
    19. echo($str);
    20. ?>
    :)))