如何将php数组转换为utf8?

时间:2013-05-22 09:26:44

标签: php arrays utf

我有一个数组:

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,因为我有像

这样的字符

最佳。

11 个答案:

答案 0 :(得分:31)

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

是否作业并返回带有数字键(不是关联)的序列化数组。

答案 1 :(得分:18)

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

答案 2 :(得分:13)

如果是PDO连接,以下内容可能有所帮助,但数据库应为UTF-8:

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

答案 3 :(得分:6)

你可以使用这样的东西

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

答案 4 :(得分:2)

array_walk_recursive(     $阵列,     function(&amp; $ entry){         $ entry = mb_convert_encoding(             $项,             'UTF-8'         );     } );

答案 5 :(得分:1)

先前的答案对我不起作用:( 那样就可以了:)

         $data = json_decode(
              iconv(
                  mb_detect_encoding($data, mb_detect_order(), true),
                  'CP1252',
                  json_encode($data)
                )
              , true)

答案 6 :(得分:0)

您可以使用string utf8_encode( string $data )功能来完成您想要的任务。这是一个单一的字符串。您可以编写自己的函数,使用utf8_encode函数可以转换数组。

答案 7 :(得分:0)

由于这篇文章是一个很好的SEO网站,所以我建议使用内置函数&#34; mb_convert_variables&#34;解决这个问题。它使用简单的语法。

private static final String REGEX = "..:..:..,...-...-..."; private static final String INPUT = "h1:m1:s1,nnn-nnn-nnn \n" + " h2:m2:s2,nnn-nnn-nnn \n" + " hh:mm:ss,nnn-nnn-nnn"; public static void main(String[] args) { Pattern p = Pattern.compile(REGEX); Matcher matcher = p.matcher(INPUT); while(matcher.find()) { String timePhoneNumber = matcher.group(0); String tokens[] = timePhoneNumber.split(","); String time = tokens[0]; String phoneNumber = tokens[1]; System.out.println("Time="+time+"; phone="+phoneNumber); } }

答案 8 :(得分:0)

编码数组的更通用的函数是:

/**
 * 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 :(得分:0)

您可以将数组发送到此函数:

function utf8_converter($array){
    array_walk_recursive($array, function(&$item, $key){
        if(!mb_detect_encoding($item, 'utf-8', true)){
            $item = utf8_encode($item);
        }
    }); 
    return $array;
}

对我有用。

答案 10 :(得分:-2)

您可以执行以下操作,而不是使用递归来处理可能很慢的多维数组:

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

这会将任何字符集转换为UTF8,并保留数组中的键。因此,不是使用array_walk“懒惰”转换每一行,而是可以一次性完成整个结果集。