ロゴ
HOME > PHPの便利な小技 >

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

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
<?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);
 
 }
 
?>

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

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

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

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