перекодировка текста, не знаю начальную кодировку, как?

Тема в разделе "PHP", создана пользователем ivashka, 21 ноя 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. ivashka

    ivashka

    Регистр.:
    16 май 2007
    Сообщения:
    151
    Симпатии:
    15
    Задача следующая...
    Получаю текст при помощи file_get_contents, но разные страницы в разных кодировках, как мне этот полученный текст перекодировать в UTF8.
    Проблема в том что я не знаю в какой кодировке получаю, есть может у кого готовая для этого функция.

    ---------------------
    топик с определением кодировки по заголовкам ответа сервера и пр.
     
  2. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
    Функция
    PHP:

    function u8($win,$h,$t)
    {
    global 
    $w8;
    $w8[chr($h).chr($t)] = $win;
    }
    $c1 chr(208);
    $c2 chr(209);
    u8("й",208,185); u8("ц",209,134); u8("у",209,131);
    u8("к",208,186); u8("е",208,181); u8("н",208,189);
    u8("г",208,179); u8("ш",209,136); u8("щ",209,137);
    u8("з",208,183); u8("х",209,133); u8("ъ",209,138);
    u8("ф",209,132); u8("ы",209,139); u8("в",208,178);
    u8("а",208,176); u8("п",208,191); u8("р",209,128);
    u8("о",208,190); u8("л",208,187); u8("д",208,180);
    u8("ж",208,182); u8("э",209,141); u8("я",209,143);
    u8("ч",209,135); u8("с",209,129); u8("м",208,188);
    u8("и",208,184); u8("т",209,130); u8("ь",209,140);
    u8("б",208,177); u8("ю",209,142); u8("Й",208,153);
    u8("Ц",208,166); u8("У",208,163); u8("К",208,154);
    u8("Е",208,149); u8("Н",208,157); u8("Г",208,147);
    u8("Ш",208,168); u8("Щ",208,169); u8("З",208,151);
    u8("Х",208,165); u8("Ъ",208,170); u8("Ф",208,164);
    u8("Ы",208,171); u8("В",208,146); u8("А",208,144);
    u8("П",208,159); u8("Р",208,160); u8("О",208,158);
    u8("Л",208,155); u8("Д",208,148); u8("Ж",208,150);
    u8("Э",208,173); u8("Я",208,175); u8("Ч",208,167);
    u8("С",208,161); u8("М",208,156); u8("И",208,152);
    u8("Т",208,162); u8("Ь",208,172); u8("Б",208,145);
    u8("Ю",208,174); u8("ё",209,145); u8("Ё",208,129);
     
    function 
    utf2win ($text)
    {
    global 
    $c1,$c2,$w8;
    $u false;
    $temp "";
    for(
    $i=0,$len=strlen($text); $i<$len$i++) {
       
    $c substr($text,$i,1);
       if (
    $u) {
         
    $c $w8[$lc.$c];
         
    $temp .= isset($c)?$c:"?";
         
    $u false;
       }
       else if (
    $c==$c1 || $c==$c2) {
         
    $u true;
         
    $lc $c;
       }
       else
         
    $temp .= $c;
    }
    return 
    $temp;

    Запуск
    PHP:
    $text=utf2win($text);
     
    ivashka нравится это.
  3. everest

    everest

    Регистр.:
    20 дек 2006
    Сообщения:
    197
    Симпатии:
    20
    есть универсальное решение, только очень сложное - определяет не просто кодировку, но и язык текста.
    решение присутствует в движках поисковиков, типа

    http://www.mnogosearch.com
     
  4. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    Я делаю так
    PHP:
    $text=iconv("utf-8""windows-1251""$text"); 
    Но это самый простой способ.
    Вот если на сайте источнике нет вообще указаной кодировки. Тогда нужно делать с помощью условий и
    PHP:
    utf-8  меняем  на windows-1251.
    В общем с лева то что надо сменить а справа то на что надо сменить.
     
  5. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    есть универсальное решение и очень простое
    http://php.southpark.com.ua/2007/language-detection/

    Я делал даже порт на C#. работает отлично.
     
  6. ivashka

    ivashka

    Регистр.:
    16 май 2007
    Сообщения:
    151
    Симпатии:
    15
    Впринципе такое решение подходит...
    Но как сделать так, что бы если текст в утф8, то перекодировку с вин-1251 в утф не делать.
    Сейчас делаю для всего, и там где была вин-1251 все супер, а там где утф8 - наобород бред :(
    Что с этим можно сделать?
     
  7. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    если кодировка утф8 то зачем его кодировать. И так нормальная кодировка.
     
  8. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    Не подумайте, что спламлю функцию одну и туже в разных темах но она действительно очень полезная и много раз меня выручала charset_x_win:

    http://popoff.donetsk.ua/text/work/libs/a/charset/
     
Статус темы:
Закрыта.