2009年05月18日(月) 19:36 | posted by shin2 | Comments [0]
PHPでfgetcsv()を使用してCSVファイルを読み、2次元配列に格納したときに日本語の部分が文字化けたのでメモ。(しかも先頭から5文字ぐらいだけ)
調べてみると、よう分からんけどPHP5.0でfgetcsv()の仕様がが変わったとかなんとか…。
ロケール設定を考慮するようになったとかなんとか…。
で、確認してないけど一応対策らしきものがあるみたいだ。
csvファイルのデータの日本語の部分を「”」で囲うと文字化けしないとか。fgetcsv()の前にsetlocale(LC_ALL, ‘ja_JP.eucJP’);を設定するとか(CSVファイルの文字コードを選ぶらしいからいまいち?)。
その他に、fgetcsv_reg()という関数をfgetcsv()のかわりに自作して、解決してくれている人がいるみたいです。使い勝手が変わらなくて良いみたい。
結局、2次元配列になればなんだっていいので、file()とexplode()で対応。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?php ///CSV読み込み $2d_array = LoadCsv(CSV_FILE_PATH); function LoadCsv ($filepath, $enc_set='EUC-JP', $enc_base='SJIS') { if (!file_exists($filepath)) { return false; } if (count($filepath)<1) { return false; } else { $array = file($filepath); for ($i=0; $i<count($array); $i++) { $array[$i] = ereg_replace("\n$", "", $array[$i]); $array[$i] = ereg_replace("\r$", "", $array[$i]); $array[$i] = explode(',', $array[$i]); $array[$i] = array_mb_encoding($array[$i], $enc_set, $enc_base); } return $array; } } //配列のデータを出力に合わせてエンコード function array_mb_encoding($array, $enc_set, $enc_base) { for ($i=0; $i<count($array); $i++) { $array[$i] = mb_convert_encoding($array[$i], $enc_set, $enc_base); } return $array; } ?> |
[この記事へのトラックバックURL]
http://www.mujuu.org/weblog/web_memo/211/trackback