W3docs

convert_cyr_string()

Функция convert_cyr_string() преобразовывала строку из одной кириллической кодировки в другую. Устарела в PHP 7.4 и удалена в PHP 8.0.

Внимание

convert_cyr_string() была устаревшей в PHP 7.4 и удалена в PHP 8.0. Это устаревшая функция, которую не следует использовать в современном коде. Для преобразования между кодировками символов используйте mb_convert_encoding() или iconv() — см. раздел ниже.

В этой главе рассказывается, что делала функция convert_cyr_string(), почему она существовала, почему была удалена и чем её заменить. Это справочный материал для чтения или сопровождения старого PHP-кода — не функция, которую следует вызывать в новом коде.

Что делала convert_cyr_string()

Функция преобразовывала строку из одной однобайтовой кириллической кодировки в другую. До того как UTF-8 стал стандартом, кириллический текст хранился в нескольких несовместимых 8-битных кодировках (Windows-1251, KOI8-R, ISO 8859-5, кодовая страница DOS 866 и несколько Mac/мейнфреймовых наборов). Функция convert_cyr_string() перекодировала байты из одного такого устаревшего набора в другой.

Синтаксис

string convert_cyr_string ( string $str , string $from , string $to )

Функция принимала три параметра и возвращала преобразованную строку:

ПараметрОписание
$strСтрока для преобразования.
$fromОдиночный символ, обозначающий исходную кодировку.
$toОдиночный символ, обозначающий целевую кодировку.

Аргументы $from и $to представляли собой однобуквенные коды, а не полные названия кодировок:

КодКодировка
kKOI8-R
wWindows-1251
iISO 8859-5
a / dx-cp866 (DOS)
mx-mac-cyrillic

Пример

<?php
// Legacy code only — this throws a fatal error on PHP 8+.
$converted = convert_cyr_string($str, "w", "k"); // Windows-1251 -> KOI8-R
echo $converted;
?>

Здесь предполагается, что $str содержит сырые байты в кодировке Windows-1251 ("w"), и функция перезаписывает их как байты KOI8-R ("k"). Важно понимать, что convert_cyr_string() работала с сырыми байтами и предполагала, что исходная строка уже находится в кодировке $from. Если передать ей строку в UTF-8 (современный стандарт по умолчанию), результат будет бессмысленным мусором (мойибаке), поскольку байты UTF-8 не соответствуют ни одному однобайтовому кириллическому набору.

Почему функция была удалена

  • Она поддерживала только фиксированный список устаревших 8-битных кириллических кодировок — UTF-8 никогда не поддерживался, поэтому функция не могла участвовать в современной обработке текста на основе Unicode.
  • Она молча искажала любой ввод, который в действительности не соответствовал указанной кодировке $from.
  • Её задачи полностью охвачены универсальными функциями iconv() и mb_convert_encoding(), поддерживающими сотни кодировок, включая UTF-8.

По этим причинам функция была помечена как устаревшая в PHP 7.4 и удалена в PHP 8.0. Вызов её сегодня приводит к фатальной ошибке Error.

Что использовать вместо неё

Используйте mb_convert_encoding() (из расширения mbstring) или iconv(). Обе функции принимают реальные названия кодировок и поддерживают UTF-8:

<?php
// Convert Windows-1251 bytes to UTF-8.
$utf8 = mb_convert_encoding($legacy, "UTF-8", "Windows-1251");

// The same thing with iconv().
$utf8 = iconv("Windows-1251", "UTF-8", $legacy);

// Convert KOI8-R to UTF-8.
$utf8 = mb_convert_encoding($legacy, "UTF-8", "KOI8-R");
?>

Преобразование в UTF-8 (а не между двумя устаревшими кодировками) — почти всегда именно то, что нужно: как только текст переведён в UTF-8, он корректно работает везде — в современном PHP, базах данных и браузерах.

Итог

convert_cyr_string() была вспомогательной функцией доюникодной эпохи для перекодирования байтов между устаревшими кириллическими кодировками. В PHP 8.0 и новее она отсутствует. Если вы встретите её в старом коде, замените каждый вызов на iconv() или mb_convert_encoding() и перенесите данные в UTF-8.

Подробнее о работе с текстом в PHP см. в разделах PHP Strings и htmlentities().

Практика

Практика
Что делает функция PHP 'iconv', как описано в статье?
Что делает функция PHP 'iconv', как описано в статье?
Was this page helpful?