За последние 24 часа нас посетили 35886 программистов и 1745 роботов. Сейчас ищут 1353 программиста ...

Как побороть эту кодировку?

Тема в разделе "PHP для новичков", создана пользователем Basters, 18 дек 2010.

  1. Basters

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

    С нами с:
    2 янв 2008
    Сообщения:
    30
    Симпатии:
    0
    Адрес:
    Ростов на Дону
    Добрый день. Возникла такая проблема. Я получаю от скрипта, который дергает с email'a вот такой текст

    вот что там написано изначально

    в заголовке сказано - Content-Type: text/html;
    charset="koi8-r", но не получается у меня перевести это из кои8 в win1251. Штирлиц переводит)) а мне нужно средствами php перевести и дальше потом со строкой работать)

    Кто подскажет, как это лечить?
     
  2. Basters

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

    С нами с:
    2 янв 2008
    Сообщения:
    30
    Симпатии:
    0
    Адрес:
    Ростов на Дону
    з.ы. сообщение было передано из аутлука
     
  3. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Файл в кодировке KOI8-R.
    Написал спешл фор юу =)

    PHP:
    1. <?php
    2.  
    3. // Это KOI8-R документ
    4. header('content-type: text/plain; charset=koi8-r');
    5.  
    6. // Строка с текстом
    7. $encoded = '[=CD=C1=D2=CB=C1]MersedesBenz[/=CD=C1=D2=CB=C1]
    8.  
    9. [=CD=CF=C4=C5=CC=D8]E210[/=CD=CF=C4=C5=CC=D8]
    10.  
    11. [=C7=CF=C4]1997[/=C7=CF=C4]
    12.  
    13. [=C4=D7=C9=C7=C1=D4=C5=CC=D8]=C2=C5=CE=DA=C9=CE[/=C4=D7= =C9=C7=C1=D4=C5=CC=D8]
    14.  
    15. [=CF=C2=D8=C5=CD=C4]3,2[/=CF=C2=D8=C5=CD=C4]=
    16.  
    17. [=D0=D2=CF=C2=C5=C7]81000[/=D0=D2=CF=C2=C5=C7]
    18.  
    19. [=C4=C1=D4=C1=D0=D2=C9=C2]=D0=D2=C9=C2=D9=CC[/=C4=C1=D4= =C1=D0=D2=C9=C2]
    20.  
    21. [=C3=C5=CE=C1]124.422[/=C3=C5=CE=C1]
    22.  
    23. [=D3=D4=C1=D4=D5=D3]=D0=D2=CF=C4=C1=C5=D4=D3=D1[/=D3=D4= =C1=D4=D5=D3]
    24.  
    25. [=CB=CF=CD=CD=C5=CE=D4=C1=D2=C9=C9] = [/=CB=CF=CD=CD=C5=CE=D4=C1=D2=C9=C9]';
    26.  
    27. // Собственно рассчеты
    28. if(preg_match_all('/\=([A-F0-9]{2}?)/s', $encoded, $charList)) {
    29.     foreach($charList[1] as $hex) {
    30.         $encoded = str_replace(('=' . $hex), chr(hexdec($hex)), $encoded);
    31.     }
    32. }
    33.  
    34. // Смотрим, что вышло
    35. print_r($encoded);
    36.  
    37. ?>
     
  4. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Возможен, в принципе, немного более упрощенный вариант с модификатором е:

    PHP:
    1. <?php
    2.  
    3. $encoded = preg_replace('/\=([A-F0-9]{2}?)/es', 'chr(hexdec("$1"))', $encoded);
    4.  
    5. ?>
    Где $encoded - та самая строка.
    Правда тебе прийдется подчистить пробелы и обозначения пустых строк, но тут ничего сложного нет.
    Спавишься с этим самостоятельно?
     
  5. Basters

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

    С нами с:
    2 янв 2008
    Сообщения:
    30
    Симпатии:
    0
    Адрес:
    Ростов на Дону
    с пробелами и обозначениями я справлюсь, но вот как отработал твой код)

    =(
     
  6. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Я конечно всё понимаю, но когда человек совсем не читает, что я пишу, мне это начинает не нравиться ;)
    Отправляется заголовок и файл в ПРАВИЛЬНОЙ кодировке.
     
  7. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
  8. Basters

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

    С нами с:
    2 янв 2008
    Сообщения:
    30
    Симпатии:
    0
    Адрес:
    Ростов на Дону
    вопрос исчерпан.
    Код (Text):
    1. $encoded = convert_cyr_string($encoded, "k", "w");
    спасибо огромное) :)