2014-03-07

CSVファイルをデータベースにインサートする場合など、エクセルで作ったCSVファイルがPHPで見ると文字化けしてしまう事が有ります。そんなときは以下のようにしてみて下さい。

<?php
 header("Content-type:text/html;charset=UTF-8"); //☆
 mb_internal_encoding("UTF-8"); //☆
 mb_language('Japanese'); //☆

 $file     = 'data.csv';

 if( file_exists($file) === true){ //ファイルの存在を確認

     $data = file_get_contents($file); //展開
     $data = mb_convert_encoding($data, 'UTF-8', 'sjis-win'); //エンコードをUTF8へ

     $temp = tmpfile();
     fwrite($temp, $data);
     rewind($temp);
     setlocale(LC_ALL, 'ja_JP.UTF-8');  //☆

     while (($row = fgetcsv($temp, 0, ",")) !== FALSE) {
         print_r($row);
     }

     fclose($temp);

 }

?>

☆の部分が対処方です。基本的にはヘッダー部分に以下を書き加えると、ほぼ大丈夫だと思います。

 header("Content-type:text/html;charset=UTF-8"); //☆
 mb_internal_encoding("UTF-8"); //☆
 mb_language('Japanese'); //☆

それでも駄目な場合は以下を書いてみて下さい。

setlocale(LC_ALL, 'ja_JP.UTF-8');  //☆