Mb convert variables: примеры (PHP)
mb_convert_variables(string $to_encoding, array|string $from_encoding, mixed &$var, mixed &...$vars): string|falseФункция mb_convert_variables выполняет преобразование кодировки строковых переменных. Она применяется при необходимости изменить кодировку нескольких переменных, включая массивы и объекты, за один вызов.
- to_encoding (обязательный): целевая кодировка для преобразования.
- from_encoding: исходная кодировка или список кодировок в виде массива. Если используется строка, можно указать несколько кодировок через запятую. Если аргумент опущен, используется внутренняя кодировка.
- &...$vars: переменные для преобразования. Функция принимает переменное количество аргументов, начиная с третьего. Можно передавать строки, массивы, объекты.
Функция возвращает исходную кодировку первой переменной при успешном преобразовании или false при ошибке.
<?php
$str = "Привет";
$from = mb_convert_variables("UTF-8", "Windows-1251", $str);
echo $from; // Возвращает исходную кодировку
?>
Windows-1251
<?php
$str1 = "Текст1";
$str2 = "Текст2";
$result = mb_convert_variables("UTF-8", "CP1251", $str1, $str2);
var_dump($result);
?>
string(5) "CP1251"
<?php
$data = "Пример текста";
mb_convert_variables("UTF-8", "ASCII,UTF-8,Windows-1251", $data);
?>
// Текст будет преобразован, если исходная кодировка указана в списке
Преобразует кодировку одной строки. Более простая альтернатива для работы с отдельными строками.
Функция для конвертации между различными кодировками. Работает быстрее, но менее гибкая при обработке массивов.
Специализированные функции для конвертации между ISO-8859-1 и UTF-8. Ограничены одной парой кодировок.
mb_convert_variables предпочтительнее при работе с несколькими переменными разного типа. Для единичных строк чаще используют mb_convert_encoding или iconv.
<?php
$text = "Текст в UTF-8";
$result = mb_convert_variables("UTF-8", "Windows-1251", $text);
// Текст уже в UTF-8, но указана неверная исходная кодировка
?>
// Может привести к некорректному преобразованию
<?php
$num = 123;
mb_convert_variables("UTF-8", "ASCII", $num);
// Числа не преобразуются, функция игнорирует нестроковые данные
?>
<?php
class Example { public $prop = "Значение"; }
$obj = new Example();
mb_convert_variables("UTF-8", "CP1251", $obj);
// Преобразуются только строковые свойства объекта
?>Усилена строгая типизация параметров. Неверные типы аргументов теперь вызывают TypeError.
Добавлена поддержка массива кодировок в параметре from_encoding.
В ранних версиях функция могла некорректно обрабатывать объекты с приватными свойствами. С PHP 5.6 улучшена обработка сложных структур.
<?php
$data = [
"уровень1" => [
"поле1" => "Текст1",
"поле2" => "Текст2"
],
"отдельное" => "Значение"
];
mb_convert_variables("UTF-8", "Windows-1251", $data);
print_r($data);
?>
// Все строковые значения в массиве преобразованы
<?php
class User {
public $name = "Иван";
private $email = "test@example.com";
}
$obj = new User();
$array = ["комментарий" => "Текст"];
$string = "Строка";
mb_convert_variables("KOI8-R", "UTF-8", $obj, $array, $string);
// Преобразуются все строковые данные в переданных переменных
?>
<?php
$mixed = [
42, // число
"текст", // строка
null, // null
["вложенный" => "данные"] // массив
];
$encoding = mb_convert_variables("UTF-16", "UTF-8", $mixed);
var_dump($encoding);
?>
string(5) "UTF-8"
<?php
ob_start();
echo "Содержимое в CP1251";
$output = ob_get_contents();
ob_end_clean();
mb_convert_variables("UTF-8", "CP1251", $output);
echo $output;
?>
Пример демонстрирует преобразование захваченного вывода буфера.
Mb convert variables в Python
text = "Пример".encode('cp1251')
text_utf8 = text.decode('cp1251').encode('utf-8')
В Python используется цепочка методов encode/decode. Прямого аналога для нескольких переменных нет.
Mb convert variables в Javascript
let decoder = new TextDecoder('windows-1251');
let encoder = new TextEncoder();
let result = encoder.encode(decoder.decode(data));
В JavaScript работа с кодировками осуществляется через TextDecoder/TextEncoder. Преобразование массивов требует отдельной обработки.
Mb convert variables в MySQL
CONVERT(text USING utf8mb4);
-- или
ALTER TABLE table CONVERT TO CHARACTER SET utf8mb4;
MySQL предоставляет CONVERT для отдельных выражений и ALTER TABLE для массового преобразования.
В отличие от PHP, большинство языков не имеют единой функции для преобразования нескольких переменных разного типа. Обычно требуется явная итерация по структурам данных.