Як пераўтварыць масіў 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);

Я хачу, каб пераўтварыць яго з вокнаў-1250 у UTF-8, таму што ў мяне ёсць сімвалы, такія як

Лепшы.

13
Што рабіць, калі вы першапачаткова магазін/здабывання дадзеных у правільнай кадоўцы? Гэта мае сэнс, каб выправіць корань пытання не наступствы
дададзена аўтар zerkms, крыніца
Вы можаце выкарыстоўваць радок utf8_encode функцыі (радок $ дадзеныя).
дададзена аўтар Vivek Sadh, крыніца
@Leri гэта не будзе працаваць з шматмерным масівам.
дададзена аўтар xcy7e 웃, крыніца
<�Код> $ Рэз = array_map ( 'utf8_encode', $ Рэз); .
дададзена аўтар Leri, крыніца

9 адказы

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

Ці мае заданне і вяртае спарадкаваны масіў з дапамогай лічбавых клавіш (не асацыятыўны).

27
дададзена
array_walk(
    $myArray,
    function (&$entry) {
        $entry = iconv('Windows-1250', 'UTF-8', $entry);
    }
);
17
дададзена

У выпадку злучэння PDO, наступнае можа дапамагчы, але база дадзеных павінна быць у кадыроўцы UTF-8:

//Connect
$db = new PDO(
    'mysql:host=localhost;dbname=database_name;', 'dbuser', 'dbpassword',
    array('charset'=>'utf8')
);
$db->query("SET CHARACTER SET utf8");
9
дададзена
Дзякуй, выратаваў мяне непрыемнасці.
дададзена аўтар GoldenJoe, крыніца
Гэта працуе для мяне
дададзена аўтар Casperon, крыніца

U можа выкарыстоўваць нешта накшталт гэтага

<?php
    array_walk_recursive(
                                $array, function (&$value) {
                                    $value = htmlspecialchars(html_entity_decode($value, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
                                }
                        );
?>
5
дададзена
upvoted для выкарыстання array_walk_recursive
дададзена аўтар Bedu33, крыніца

Замест таго каб выкарыстоўваць рэкурсіі, каб мець справу з шматмерным масівамі, якія могуць быць павольнымі, вы можаце зрабіць наступнае:

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

Гэта будзе канвертаваць любы набор сімвалаў UTF8, а таксама захоўваць ключы ў масіве. Так што замест таго, каб «лянівы» пераўтварэнне кожнага радка выкарыстоўваючы array_walk , вы маглі б зрабіць ўвесь набор вынікаў у адзін прысест.

2
дададзена
mb_detect_encoding() чакае параметр 1, каб быць радком, $ рэс не з'яўляецца радком.
дададзена аўтар Jacta, крыніца

array_walk_recursive( $array, function (&$entry) { $entry = mb_convert_encoding( $entry, 'UTF-8' ); } );

1
дададзена

Вы можаце выкарыстоўваць радок utf8_encode (радок $ дадзеныя) <�код /> функцыю, каб выканаць тое, што вы хочаце. Гэта для аднаго радка. Вы можаце напісаць сваю ўласную функцыю з дапамогай якой вы можаце пераўтварыць масіў з дапамогай функцыі utf8_encode.

0
дададзена
Вы праверылі, што ўваход кадавання, які выкарыстоўваецца для utf8_encode ?
дададзена аўтар zerkms, крыніца

Больш агульная функцыя для кадавання масіва з'яўляецца:

/**
 * 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;
}
0
дададзена

Дзякуючы гэтым артыкуле добры сайт SEO, таму я прапаную выкарыстоўваць функцыю зборкі ў « mb_convert_variables ", каб вырашыць гэтую праблему. Ён працуе з простым сінтаксісам.

<�Код> mb_convert_variables ( 'UTF-8', 'арыгінальнае кадаваньне', масіў/аб'ект)

0
дададзена
дадаць фармат кода ў вашым адказе.
дададзена аўтар Haroldo Gondim, крыніца