Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将php数组转换为utf8?_Php_Arrays_Utf - Fatal编程技术网

如何将php数组转换为utf8?

如何将php数组转换为utf8?,php,arrays,utf,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); 我想把它从

我有一个数组:

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,因为我有这样的字符�


最好。

您可以使用
字符串utf8\u编码(字符串$data)
函数来完成您想要的功能。这是一个单一的字符串。您可以编写自己的函数,在utf8_编码函数的帮助下,您可以使用该函数转换数组。

您可以使用如下内容:

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


执行该作业并返回带有数字键的序列化数组(不是assoc)。

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

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

这将把任何字符集转换为UTF8,并在数组中保留关键点。因此,您可以一次性完成整个结果集,而不是使用
array\u walk
对每一行进行“惰性”转换。

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

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

由于本文是一个很好的SEO站点,所以我建议使用内置函数“”来解决这个问题。它使用简单的语法

mb\u转换变量('utf-8','original encode',数组/对象)

有一种简单的方法

array_walk_recursive(
  $array,
  function (&$entry) {
    $entry = mb_convert_encoding(
        $entry,
        'UTF-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;
}

前面的答案对我不适用:( 但这样没关系:)


您可以将阵列发送到此函数:

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

它适合我。

您可以使用字符串utf8\u编码(字符串$data)功能。如果您最初以正确的编码存储/检索数据,会怎么样?修复问题的根源而不是结果是有意义的
$res=array\u map('utf8\u encode',$res)
@Leri这不适用于多维数组。您是否检查了
utf8\u encode
使用的输入编码?mb\u detect\u encodeding()希望参数1为字符串,$res不是字符串。谢谢,为我省去了一些麻烦。这里的解决方案更简单、更快、更有效!对我来说效果很好!:)
utf8_encode()期望参数1是字符串,数组给定
;PHP7.4.4.刚刚用7.4.3对其进行了测试-没有问题-您确定您的输入数组不包含任何数组元素吗?这个解决方案不是递归的!
         $data = json_decode(
              iconv(
                  mb_detect_encoding($data, mb_detect_order(), true),
                  'CP1252',
                  json_encode($data)
                )
              , true)
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;
}