Не работает функция iconv(), а нужно конвертнуть из UTF-8 в windows-1251

Что же делать, когда на хостинге не работает функция iconv() и php выдает Call to undefined function:  iconv(), а нужно конвертнуть из UTF-8 в windows-1251

На помощь прийдет следующая функция:

function utf8_to_win($string){
    for ($c=0;$c         $i=ord($string[$c]);
        if ($i <= 127) @$out .= $string[$c];
            if (@$byte2){
                $new_c2=($c1&3)*64+($i&63);
                $new_c1=($c1>>2)&5;
                $new_i=$new_c1*256+$new_c2;
                if ($new_i==1025){
                    $out_i=168;
                } else {
                   if ($new_i==1105){
                        $out_i=184;
                    } else {
                        $out_i=$new_i-848;
                    }
                }
                @$out .= chr($out_i);
                $byte2 = false;
            }
            if (($i>>5)==6) {
                $c1 = $i;
                $byte2 = true;
            }
    }
    return $out;
}
?>


09.07.2007 21:20

Комментарии

Спасибо очень пригодилось!
17.03.2009 14:04
Спасибо!
24.05.2009 16:42
Реально очень полезная выручалка, в том случае если никак не получается совладать с кодировкой и локалями на серваке.
26.05.2009 17:52
Я замучался искать нормальный вариант) Спасибо!
04.07.2009 18:41
Большое ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!!!
16.09.2009 07:13
Спасибо!!!
03.12.2009 15:33
Как ты это сделал, демон!! О_О
Большущее благодарю!
28.12.2009 09:46
Автору респектище!!! Очень помог.
10.02.2010 15:28
Спасибо, автор.
Иван Старосайтов | 19.05.2010 05:42
большое спасибо! очень полезная вещь! :-)8  :-D  :-D
Alex | 12.05.2010 07:54
Человечище! (yea)
Andrey | 04.06.2010 19:14
Огромное спасибо!
Andrey_tatarstan | 18.06.2010 15:00
Молодцом!!! Так держать)))))
Koste | 01.07.2010 08:54
Благодарю! Отличная функция. Предлагаю сделать функцию наоборот и для других кодировок ;-)
Александр | 21.07.2010 15:07
а куда ее вставить? я в пхп не силен, у меня на каталоге VirtueMart такая хрень....причем первый раз...раньше как то не было...хз в чем проблема

джумла 1.5.18
Artemonuchin | 27.07.2010 04:29
блин, заработало, полдня промучился над кодировками, thanks
Vlad444 | 23.10.2010 14:36
Не всегда функция strlen() на хостингах включена, встречалась и такая проблема, поэтому еще один вариант, более актуальный:

function utf8_to_win1251($text)
{
   $text=str_replace("\xD0\xB0","а",$text);  $text=str_replace("\xD0\x90","А",$text);
   $text=str_replace("\xD0\xB1","б",$text);  $text=str_replace("\xD0\x91","Б",$text);
   $text=str_replace("\xD0\xB2","в",$text);  $text=str_replace("\xD0\x92","В",$text);
   $text=str_replace("\xD0\xB3","г",$text);  $text=str_replace("\xD0\x93","Г",$text);
   $text=str_replace("\xD0\xB4","д",$text);  $text=str_replace("\xD0\x94","Д",$text);
   $text=str_replace("\xD0\xB5","е",$text);  $text=str_replace("\xD0\x95","Е",$text);
   $text=str_replace("\xD1\x91","ё",$text);  $text=str_replace("\xD0\x81","Ё",$text);
   $text=str_replace("\xD0\xB6","ж",$text);  $text=str_replace("\xD0\x96","Ж",$text);
   $text=str_replace("\xD0\xB7","з",$text);  $text=str_replace("\xD0\x97","З",$text);
   $text=str_replace("\xD0\xB8","и",$text);  $text=str_replace("\xD0\x98","И",$text);
   $text=str_replace("\xD0\xB9","й",$text);  $text=str_replace("\xD0\x99","Й",$text);
   $text=str_replace("\xD0\xBA","к",$text);  $text=str_replace("\xD0\x9A","К",$text);
   $text=str_replace("\xD0\xBB","л",$text);  $text=str_replace("\xD0\x9B","Л",$text);
   $text=str_replace("\xD0\xBC","м",$text);  $text=str_replace("\xD0\x9C","М",$text);
   $text=str_replace("\xD0\xBD","н",$text);  $text=str_replace("\xD0\x9D","Н",$text);
   $text=str_replace("\xD0\xBE","о",$text);  $text=str_replace("\xD0\x9E","О",$text);
   $text=str_replace("\xD0\xBF","п",$text);  $text=str_replace("\xD0\x9F","П",$text);
   $text=str_replace("\xD1\x80","р",$text);  $text=str_replace("\xD0\xA0","Р",$text);
   $text=str_replace("\xD1\x81","с",$text);  $text=str_replace("\xD0\xA1","С",$text);
   $text=str_replace("\xD1\x82","т",$text);  $text=str_replace("\xD0\xA2","Т",$text);
   $text=str_replace("\xD1\x83","у",$text);  $text=str_replace("\xD0\xA3","У",$text);
   $text=str_replace("\xD1\x84","ф",$text);  $text=str_replace("\xD0\xA4","Ф",$text);
   $text=str_replace("\xD1\x85","х",$text);  $text=str_replace("\xD0\xA5","Х",$text);
   $text=str_replace("\xD1\x86","ц",$text);  $text=str_replace("\xD0\xA6","Ц",$text);
   $text=str_replace("\xD1\x87","ч",$text);  $text=str_replace("\xD0\xA7","Ч",$text);
   $text=str_replace("\xD1\x88","ш",$text);  $text=str_replace("\xD0\xA8","Ш",$text);
   $text=str_replace("\xD1\x89","щ",$text);  $text=str_replace("\xD0\xA9","Щ",$text);
   $text=str_replace("\xD1\x8A","ъ",$text);  $text=str_replace("\xD0\xAA","Ъ",$text);
   $text=str_replace("\xD1\x8B","ы",$text);  $text=str_replace("\xD0\xAB","Ы",$text);
   $text=str_replace("\xD1\x8C","ь",$text);  $text=str_replace("\xD0\xAC","Ь",$text);
   $text=str_replace("\xD1\x8D","э",$text);  $text=str_replace("\xD0\xAD","Э",$text);
   $text=str_replace("\xD1\x8E","ю",$text);  $text=str_replace("\xD0\xAE","Ю",$text);
   $text=str_replace("\xD1\x8F","я",$text);  $text=str_replace("\xD0\xAF","Я",$text);
   $text=str_replace("\xe2\x84\x96","№",$text);
   return $text;
}
25.09.2010 10:49
Не легче загнать все сопоставления в массив ?
Илья | 07.11.2010 12:17
Огромное спасибо авторам! Очень помогли мне.
Дмитрий | 06.06.2011 08:44
Подскажите пожалуйста, где в joomla 1.5 прописывать данную функцию.
Оксана | 06.10.2012 01:42
Такое ощущение что этот скрипт никто не использовал, в цикле for явно ошибка!!!
Дмитрий | 25.03.2013 06:37