Как преобразовать php-массив в utf8?

У меня есть массив:

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, потому что у меня есть символы, такие как

Бест.

Ответ 1

$utfEncodedArray = array_map("utf8_encode", $inputArray );

Выполняет ли задание и возвращает сериализованный массив с числовыми клавишами (не ассоциированным).

Ответ 2

array_walk(
    $myArray,
    function (&$entry) {
        $entry = iconv('Windows-1250', 'UTF-8', $entry);
    }
);

Ответ 3

В случае подключения PDO может помочь следующее: база данных должна быть в UTF-8:

//Connect
$db = new PDO(
    'mysql:host=localhost;dbname=database_name;', 'dbuser', 'dbpassword',
    array('charset'=>'utf8')
);
$db->query("SET CHARACTER SET utf8");

Ответ 4

U может использовать что-то вроде этого

<?php
    array_walk_recursive(
                                $array, function (&$value) {
                                    $value = htmlspecialchars(html_entity_decode($value, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
                                }
                        );
?>

Ответ 5

array_walk_recursive (   $ Массив,   function (& $entry) {       $ entry = mb_convert_encoding (           $ Запись,           'UTF-8'       );   } );

Ответ 6

Вы можете использовать функцию string utf8_encode( string $data ), чтобы выполнить то, что вы хотите. Это для одной строки. Вы можете написать свою собственную функцию, используя которую вы можете преобразовать массив с помощью функции utf8_encode.

Ответ 7

Из-за этой статьи хороший сайт SEO, поэтому я предлагаю использовать встроенную функцию mb_convert_variables" для решения этой проблемы. Он работает с простым синтаксисом.

mb_convert_variables('utf-8', 'original encode', array/object)

Ответ 8

Более общая функция для кодирования массива:

/**
 * 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;
}

Ответ 9

Вместо использования рекурсии для работы с многомерными массивами, которые могут быть медленными, вы можете сделать следующее:

$res = json_decode(
    json_encode(
        iconv(
            mb_detect_encoding($res, mb_detect_order(), true),
            'UTF-8',
            $res
        )
    ),
    true
);

Это преобразует любой набор символов в UTF8, а также сохранит ключи в вашем массиве. Поэтому вместо "ленивого" преобразования каждой строки с помощью array_walk вы можете сделать весь набор результатов за один раз.