Перекодировка UTF-8 в cp1251

Под катом представлено несколько функций для PHP для перекодировки UTF-8 в cp1251

Для выполнения вышепоставленной задачи вы можете воспользоваться стандартной функцией PHP – iconv. Ее подробное описание можно найти на официальном сайте PHP.

Либо воспользоваться одной из функций для перекодировки кириллицы из UTF-8 в windows-1251, представленных ниже.

function utf8_to_cp1251($utf8) {

    $windows1251 = "";
    $chars = preg_split("//",$utf8);

    for ($i=1; $i<count($chars)-1; $i++) {
        $prefix = ord($chars[$i]);
        $suffix = ord($chars[$i+1]);

        if ($prefix==215) {
            $windows1251 .= chr($suffix+80);
            $i++;
        } elseif ($prefix==214) {
            $windows1251 .= chr($suffix+16);
            $i++;
        } else {
            $windows1251 .= $chars[$i];
        }
    }

    return $windows1251;
}

function Utf8Win($str,$type="w")  {
    static $conv='';

    if (!is_array($conv))  {
        $conv = array();

        for($x=128;$x<=143;$x++)  {
            $conv['u'][]=chr(209).chr($x);
            $conv['w'][]=chr($x+112);

        }

        for($x=144;$x<=191;$x++)  {
            $conv['u'][]=chr(208).chr($x);
            $conv['w'][]=chr($x+48);
        }

        $conv['u'][]=chr(208).chr(129);
        $conv['w'][]=chr(168);
        $conv['u'][]=chr(209).chr(145);
        $conv['w'][]=chr(184);
        $conv['u'][]=chr(208).chr(135);
        $conv['w'][]=chr(175);
        $conv['u'][]=chr(209).chr(151);
        $conv['w'][]=chr(191);
        $conv['u'][]=chr(208).chr(134);
        $conv['w'][]=chr(178);
        $conv['u'][]=chr(209).chr(150);
        $conv['w'][]=chr(179);
        $conv['u'][]=chr(210).chr(144);
        $conv['w'][]=chr(165);
        $conv['u'][]=chr(210).chr(145);
        $conv['w'][]=chr(180);
        $conv['u'][]=chr(208).chr(132);
        $conv['w'][]=chr(170);
        $conv['u'][]=chr(209).chr(148);
        $conv['w'][]=chr(186);
        $conv['u'][]=chr(226).chr(132).chr(150);
        $conv['w'][]=chr(185);
    }

    if ($type == 'w') {
        return str_replace($conv['u'],$conv['w'],$str);
    } elseif ($type == 'u') {
        return str_replace($conv['w'], $conv['u'],$str);
    } else {
        return $str;
    }
}

13 Responses to “Перекодировка UTF-8 в cp1251”

  1. eugen says:

    Нє ну воно зрозуміло, але я не розумію нафіг його використовувати, можливо треба навпаки, з 1251 у утф8?

  2. Mihalytch says:

    Если весь интерфейс на cp1251, а нужно импортировать и вывести некоторую информацию, которая изначально в UTF-8 … Вот как раз может и пригодиться.
    Твое пожелание обязательно учту.

  3. eugen says:

    Доречі мені здавалося що у пхп є встроєна бібліотека для перекодування текстів, чи не так. Не простіше використать iconv ?

  4. Mihalytch says:

    Читаем: описание iconv на оф. сайте php.net:
    “…Этот модуль является частью PHP начиная с версии 5 …”
    Значит, в версиях ниже 5й iconv устанавливается как расширение. Мы не всегда можем получить доступ к настройкам php…
    Хотя на данный момент у большинства хостеров установлен PHP версии 5.х

  5. Oleg says:

    iconv Работает начиная с PHP версии 4.0.5:

    Convert string to requested character encoding (PHP 4 >= 4.0.5, PHP 5)

  6. Oleg says:

    (Я имею в виду функцию iconv, а не модуль)

  7. Андрей says:

    Спасибо за код! Очень помог!!

  8. Игорь says:

    Спасибо!!!, Спасибо!!!, Спасибо!!!!!!! Очень помогло

  9. Присоединяюсь! Спасибо, очень помогло!!!

  10. Alligator says:

    Не правильно работает буквы “я” и “ч” не перекодируются

  11. Аслан says:

    Спасибо! очень помог Ваш скрипт! долго копался в нете, нашёл его по запросу “привет” )))

  12. Сергей says:

    В начале статьи речь шла о стандартной функции, работает отлично и без проблем. Минимум ресурсов)
    Использую ее давно, пока хватает:

    $string_1251=iconv(“UTF-8”, “windows-1251”, $string_UTF);

Leave a Reply




*