Под катом представлено несколько функций для 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;
    }
}
Tags: , , ,
Share  

Комментарии (12) на запись “Перекодировка UTF-8 в cp1251”

  1. eugen пишет:

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

    [Ответить]

  2. Mihalytch пишет:

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

    [Ответить]

  3. eugen пишет:

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

    [Ответить]

  4. Mihalytch пишет:

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

    [Ответить]

  5. Oleg пишет:

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

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

    [Ответить]

  6. Oleg пишет:

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

    [Ответить]

  7. Андрей пишет:

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

    [Ответить]

  8. Игорь пишет:

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

    [Ответить]

  9. Евгений пишет:

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

    [Ответить]

  10. Alligator пишет:

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

    [Ответить]

    Mihalytch Reply:

    Спасибо. Проверю и выложу обновления в ближайшем будущем.

    [Ответить]

  11. Аслан пишет:

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

    [Ответить]

Оставить комментарий