単に、自分が知らなかっただけなのでメモしておきます。
エクセルの表を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_encoding
とmb_convert_variables
では、引数の並びルールが違うのでご注意を!(ちょっと悩んじゃったよ)