PHP 配列のエンコーディングを変換 mb_convert_variables

単に、自分が知らなかっただけなのでメモしておきます。

エクセルの表をCSVに書き出して、PHPで読み込んだんですが、そのまま表示すると文字化け。
エクセルがshift_jisで保存しちゃうからですね。

そこでエンコーディングを変換するわけですが、fileを使ってCSVを読み込んだ場合、1行を1要素とした配列になっているので、mb_conver_encodingは使えません。これは文字列が対象なので。

//CSVファイル「data.csv」を配列に格納
$data = file("[path_to_file]/data.csv");

//↓$dataは文字列ではないので、これはエラーになります。
mb_convert_encoding($data, "UTF-8", "SJIS");

そこで、mb_convert_variables
これは、配列も含めた変数のエンコーディング変換をしてくれます。複数の変数も一括変換可能です。

mv_convert_variable(変換後,変換前,変数1,変数2,・・・);

ということで、以下で無事変換完了。

mb_convert_variables("UTF-8","SJIS", $data);

mb_convert_encodingmb_convert_variablesでは、引数の並びルールが違うのでご注意を!(ちょっと悩んじゃったよ)

PHP | , , |