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 представляли собой однобуквенные коды, а не полные названия кодировок:
| Код | Кодировка |
|---|---|
k | KOI8-R |
w | Windows-1251 |
i | ISO 8859-5 |
a / d | x-cp866 (DOS) |
m | x-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().