21

I have an array:

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

I want to convert it from windows-1250 to utf-8, because I have chars like �</p>

Best.

4

12 回答 12

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

完成这项工作并返回一个带有数字键(不是 assoc)的序列化数组。

于 2013-11-05T21:09:28.097 回答
19
array_walk(
    $myArray,
    function (&$entry) {
        $entry = iconv('Windows-1250', 'UTF-8', $entry);
    }
);
于 2013-05-22T09:31:28.613 回答
16

在 PDO 连接的情况下,以下可能会有所帮助,但数据库应为 UTF-8:

//Connect
$db = new PDO(
    'mysql:host=localhost;dbname=database_name;', 'dbuser', 'dbpassword',
    array('charset'=>'utf8')
);
$db->query("SET CHARACTER SET utf8");
于 2014-12-25T20:38:37.750 回答
12

有一个简单的方法

array_walk_recursive(
  $array,
  function (&$entry) {
    $entry = mb_convert_encoding(
        $entry,
        'UTF-8'
    );
  }
);
于 2016-09-09T06:44:03.177 回答
11

你可以使用这样的东西:

<?php
array_walk_recursive(
$array, function (&$value)
{
 $value = htmlspecialchars(html_entity_decode($value, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
}
);
?>
于 2013-09-12T12:31:05.283 回答
6

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

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

这个对我有用。

于 2020-07-22T17:57:49.220 回答
2

以前的答案对我不起作用:(但没关系:)

         $data = json_decode(
              iconv(
                  mb_detect_encoding($data, mb_detect_order(), true),
                  'CP1252',
                  json_encode($data)
                )
              , true)
于 2019-11-05T22:15:15.950 回答
0

你可以使用string utf8_encode( string $data )函数来完成你想要的。它适用于单个字符串。您可以编写自己的函数,使用它可以在 utf8_encode 函数的帮助下转换数组。

于 2013-05-22T09:30:22.863 回答
0

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

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

于 2016-01-15T02:16:22.413 回答
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;
}
于 2018-02-12T08:59:45.700 回答
0

tha 工作的简单方法是:

array_map(callable $callback, array $array1, array $... = ?): array

//Example #1 Example of the function array_map()

<?php
function cube($n)
{
    return($n * $n * $n);
}

$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>

$b 的输出是:

Array
(
    [0] => 1
    [1] => 8
    [2] => 27
    [3] => 64
    [4] => 125
)

更多细节 src -> PHP: array_map - Manual

于 2021-09-23T15:38:45.047 回答
-3

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

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

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

于 2014-08-16T23:26:58.233 回答