Ответ 1
$utfEncodedArray = array_map("utf8_encode", $inputArray );
Выполняет ли задание и возвращает сериализованный массив с числовыми клавишами (не ассоциированным).
У меня есть массив:
require_once ('config.php');
require_once ('php/Db.class.php');
require_once ('php/Top.class.php');
echo "db";
$db = new Db(DB_CUSTOM);
$db->connect();
$res = $db->getResult("select first 1 * from reklamacje");
print_r($res);
Я хочу преобразовать его из windows-1250 в utf-8, потому что у меня есть символы, такие как
Бест.
$utfEncodedArray = array_map("utf8_encode", $inputArray );
Выполняет ли задание и возвращает сериализованный массив с числовыми клавишами (не ассоциированным).
array_walk(
$myArray,
function (&$entry) {
$entry = iconv('Windows-1250', 'UTF-8', $entry);
}
);
В случае подключения PDO может помочь следующее: база данных должна быть в UTF-8:
//Connect
$db = new PDO(
'mysql:host=localhost;dbname=database_name;', 'dbuser', 'dbpassword',
array('charset'=>'utf8')
);
$db->query("SET CHARACTER SET utf8");
U может использовать что-то вроде этого
<?php
array_walk_recursive(
$array, function (&$value) {
$value = htmlspecialchars(html_entity_decode($value, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
}
);
?>
array_walk_recursive ( $ Массив, function (& $entry) { $ entry = mb_convert_encoding ( $ Запись, 'UTF-8' ); } );
Вы можете использовать функцию string utf8_encode( string $data )
, чтобы выполнить то, что вы хотите. Это для одной строки. Вы можете написать свою собственную функцию, используя которую вы можете преобразовать массив с помощью функции utf8_encode.
Из-за этой статьи хороший сайт SEO, поэтому я предлагаю использовать встроенную функцию mb_convert_variables" для решения этой проблемы. Он работает с простым синтаксисом.
mb_convert_variables('utf-8', 'original encode', array/object)
Более общая функция для кодирования массива:
/**
* also for multidemensional arrays
*
* @param array $array
* @param string $sourceEncoding
* @param string $destinationEncoding
*
* @return array
*/
function encodeArray(array $array, string $sourceEncoding, string $destinationEncoding = 'UTF-8'): array
{
if($sourceEncoding === $destinationEncoding){
return $array;
}
array_walk_recursive($array,
function(&$array) use ($sourceEncoding, $destinationEncoding) {
$array = mb_convert_encoding($array, $destinationEncoding, $sourceEncoding);
}
);
return $array;
}
Вместо использования рекурсии для работы с многомерными массивами, которые могут быть медленными, вы можете сделать следующее:
$res = json_decode(
json_encode(
iconv(
mb_detect_encoding($res, mb_detect_order(), true),
'UTF-8',
$res
)
),
true
);
Это преобразует любой набор символов в UTF8, а также сохранит ключи в вашем массиве. Поэтому вместо "ленивого" преобразования каждой строки с помощью array_walk
вы можете сделать весь набор результатов за один раз.