2013-05-22 277 views
10

我有一個數組:如何將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,因爲我有一個像

最佳字符。

+0

可以使用串函數utf8_encode(字符串$數據)函數。 –

+2

如果您最初以正確的編碼存儲/檢索數據會怎麼樣?修復問題的根源並不是後果 – zerkms

+10

'$ res = array_map('utf8_encode',$ res);'。 – Leri

回答

0

你可以使用string utf8_encode(string $data)函數來完成你想要的。這是一個單一的字符串。你可以編寫自己的函數,使用它你可以在utf8_encode函數的幫助下轉換一個數組。

+1

您是否檢查過用於'utf8_encode'的輸入編碼? – zerkms

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

U可以使用這樣的

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

upvoted for array_walk_recursive – Bedu33

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

做這項工作,並返回用數字鍵(非締合)序列化數組。

-2

而不是使用遞歸處理多維數組,這可能是緩慢的,你可以做到以下幾點:

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

這將轉換任何字符集爲UTF8,也是你的數組中保存鍵。因此,使用array_walk來代替「懶惰」轉換每一行,您可以一次完成整個結果集。

+0

mb_detect_encoding()期望參數1是字符串,$ res不是字符串。 – Jacta

8

在PDO連接的情況下,下面可能會有所幫助,但數據庫應該是UTF-8:

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

謝謝,救了我一些麻煩。 – GoldenJoe

+0

這適用於我 – Casperon

0

由於這篇文章是一個很好的搜索引擎優化的網站,所以我建議用建設 - 在功能「mb_convert_variables」來解決這個問題。它使用簡單的語法。

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

+0

在答案中添加代碼格式。 –

1

array_walk_recursive( $陣列, 函數(& $條目){$ 條目= mb_convert_encoding( $條目, 'UTF-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; 
}