Mb convert encoding: примеры (PHP)

Функция mb_convert_encoding в PHP 8: примеры и применение
Раздел: Многобайтовые строки
mb_convert_encoding(string $string, string $to_encoding, array|string|null $from_encoding = null): string
Назначение и аргументы mb_convert_encoding

Функция mb_convert_encoding в PHP выполняет преобразование кодировки строки. Она применяется для корректной обработки многобайтовых строк, например, текстов на кириллице, азиатских языках или при работе с данными из различных источников.

Синтаксис функции
string mb_convert_encoding(string $string, string $to_encoding, mixed $from_encoding = null)

Аргументы функции:

  • $string – строка, которую необходимо преобразовать. Это обязательный параметр.
  • $to_encoding – целевая кодировка, в которую нужно преобразовать строку. Например, 'UTF-8', 'Windows-1251', 'ISO-8859-5'.
  • $from_encoding – исходная кодировка строки. Можно передать строку с одной кодировкой, массив кодировок или список через запятую. Если параметр опущен или равен null, используется внутренняя кодировка, установленная функцией mb_detect_encoding.

Функция возвращает преобразованную строку или false в случае ошибки.

Основные примеры использования
Простое преобразование

Преобразование строки из Windows-1251 в UTF-8.

$text = mb_convert_encoding('Пример текста', 'UTF-8', 'Windows-1251');
echo $text;
Пример текста
Автоматическое определение кодировки

Когда исходная кодировка неизвестна, можно передать несколько вариантов.

$str = 'Тестовая строка';
$result = mb_convert_encoding($str, 'UTF-8', 'ASCII, UTF-8, Windows-1251');
echo $result;
Тестовая строка
Использование массива кодировок
$encodings = ['UTF-8', 'ISO-8859-1'];
$converted = mb_convert_encoding('Hello World', 'UTF-8', $encodings);
Hello World
Альтернативные функции в PHP

В PHP есть несколько функций для работы с кодировками.

iconv

Функция iconv также преобразует кодировку, но не всегда корректно обрабатывает многобайтовые строки в некоторых случаях.

echo iconv('Windows-1251', 'UTF-8//IGNORE', 'Текст');

Используется при работе с библиотеками, требующими именно iconv, или для специфических трансляций.

utf8_encode и utf8_decode

Эти функции конвертируют только между UTF-8 и ISO-8859-1. Они устарели в PHP 8.2.

$encoded = utf8_encode('some text');

Их применение не рекомендуется в новом коде.

Выбор функции

Функцию mb_convert_encoding предпочтительнее использовать для многобайтовых строк, особенно когда исходная кодировка неизвестна или требует автоматического определения. Функция iconv может быть полезна для более строгого контроля над процессом преобразования и обработки ошибок.

Аналоги в других языках

Mb convert encoding в Python

В Python для преобразования кодировок используется метод decode и encode строки.

text = 'Пример'.encode('windows-1251')
decoded_text = text.decode('utf-8', errors='ignore')

Mb convert encoding в Javascript

В браузерном JavaScript для преобразования кодировок применяются объекты TextDecoder и TextEncoder.

const decoder = new TextDecoder('windows-1251');
const data = new Uint8Array([...]);
const str = decoder.decode(data);

Mb convert encoding в MySQL

В MySQL можно использовать функции CONVERT или CAST для изменения кодировки данных при выборке.

SELECT CONVERT(column_name USING utf8) FROM table;

Отличия от PHP заключаются в синтаксисе и интеграции преобразований в процесс работы с данными. В Python и JavaScript преобразования обычно более тесно связаны с вводом-выводом.

Типичные ошибки и их решение
Некорректная исходная кодировка

Если указана неверная исходная кодировка, символы могут отображаться некорректно.

echo mb_convert_encoding('Пример', 'UTF-8', 'ASCII');
????????
Отсутствие расширения mbstring

Функция не будет определена, если расширение mbstring не установлено.

if (!function_exists('mb_convert_encoding')) {
    echo 'Расширение mbstring отключено';
}
Использование устаревших кодировок

Некоторые устаревшие кодировки могут не поддерживаться, что приводит к ошибкам.

// Попытка использовать неподдерживаемую кодировку
$result = @mb_convert_encoding('text', 'UTF-8', 'UNKNOWN-ENCODING');

Рекомендуется проверять список поддерживаемых кодировок с помощью mb_list_encodings.

Изменения в последних версиях PHP

В PHP 8 функция mb convert encoding не претерпела кардинальных изменений, но есть важные нюансы.

  • В PHP 8.0 улучшена обработка ошибок: некоторые предупреждения были преобразованы в исключения TypeError при неверных типах аргументов.
  • Рекомендуется всегда указывать третий аргумент для избежания неоднозначностей, так как поведение при его отсутствии может зависеть от конфигурации.
  • В PHP 8.1 и выше продолжена работа над стабильностью и производительностью многобайтовых функций.

Важно отметить, что с выходом PHP 8.2 функции utf8_encode и utf8_decode объявлены устаревшими, что делает mb convert encoding еще более предпочтительным выбором.

Расширенные примеры применения
Обработка данных из CSV файла

Преобразование содержимого CSV файла из Windows-1251 в UTF-8.

Пример php
$csvLines = file('data.csv');
foreach ($csvLines as $line) {
    $utf8Line = mb_convert_encoding($line, 'UTF-8', 'Windows-1251');
    // Дальнейшая обработка строки
    echo $utf8Line;
}
Работа с контентом веб-страниц

Конвертация содержимого, полученного из внешнего источника, с определением кодировки.

Пример php
$html = file_get_contents('http://example.com');
$encoding = mb_detect_encoding($html, ['UTF-8', 'Windows-1251', 'KOI8-R'], true);
if ($encoding && $encoding != 'UTF-8') {
    $html = mb_convert_encoding($html, 'UTF-8', $encoding);
}
echo mb_substr($html, 0, 100);
Пакетное преобразование массива строк
Пример php
$data = ['Текст 1', 'Текст 2'];
$convertedData = array_map(function($item) {
    return mb_convert_encoding($item, 'UTF-8', 'auto');
}, $data);
print_r($convertedData);
Array
(
    [0] => Текст 1
    [1] => Текст 2
)
Специфические флаги и кодировки

Использование редко применяемых кодировок, таких как Base64 или UUencode, через mb_convert_encoding.

Пример php
$base64 = mb_convert_encoding('Hello', 'Base64', 'UTF-8');
echo $base64; // SGVsbG8=

Это демонстрирует гибкость функции за пределами обычных текстовых кодировок.

PHP mb_convert_encoding function comments

En
Mb convert encoding Convert a string from one character encoding to another