2013-05-22 20 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); 

は私が

ベストのような文字を持っているので、UTF-8に窓-1250から、それを変換します。

+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

array_walk_recursiveを使用してupvoted – 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

ため、この記事には良いSEOのサイトですので、私はビルド - 使用することをお勧め関数 "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; 
} 
関連する問題