Mb convert encoding: примеры (PHP)
mb_convert_encoding(string $string, string $to_encoding, array|string|null $from_encoding = null): stringФункция 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 есть несколько функций для работы с кодировками.
Функция iconv также преобразует кодировку, но не всегда корректно обрабатывает многобайтовые строки в некоторых случаях.
echo iconv('Windows-1251', 'UTF-8//IGNORE', 'Текст');Используется при работе с библиотеками, требующими именно iconv, или для специфических трансляций.
Эти функции конвертируют только между 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 не установлено.
if (!function_exists('mb_convert_encoding')) {
echo 'Расширение mbstring отключено';
}Некоторые устаревшие кодировки могут не поддерживаться, что приводит к ошибкам.
// Попытка использовать неподдерживаемую кодировку
$result = @mb_convert_encoding('text', 'UTF-8', 'UNKNOWN-ENCODING');Рекомендуется проверять список поддерживаемых кодировок с помощью mb_list_encodings.
В PHP 8 функция mb convert encoding не претерпела кардинальных изменений, но есть важные нюансы.
- В PHP 8.0 улучшена обработка ошибок: некоторые предупреждения были преобразованы в исключения TypeError при неверных типах аргументов.
- Рекомендуется всегда указывать третий аргумент для избежания неоднозначностей, так как поведение при его отсутствии может зависеть от конфигурации.
- В PHP 8.1 и выше продолжена работа над стабильностью и производительностью многобайтовых функций.
Важно отметить, что с выходом PHP 8.2 функции utf8_encode и utf8_decode объявлены устаревшими, что делает mb convert encoding еще более предпочтительным выбором.
Преобразование содержимого CSV файла из Windows-1251 в UTF-8.
$csvLines = file('data.csv');
foreach ($csvLines as $line) {
$utf8Line = mb_convert_encoding($line, 'UTF-8', 'Windows-1251');
// Дальнейшая обработка строки
echo $utf8Line;
}Конвертация содержимого, полученного из внешнего источника, с определением кодировки.
$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);$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.
$base64 = mb_convert_encoding('Hello', 'Base64', 'UTF-8');
echo $base64; // SGVsbG8=Это демонстрирует гибкость функции за пределами обычных текстовых кодировок.