PHPでCSVファイルを読み込むと、文字化けする

1時間ほどのた打ち回ったネタですw
最近はHTMLもPHPも文字コードをutf-8で統一するようにしてるんだけどさ。
shift-jisだと5C問題あったりして、スマートじゃないから。
ところがutf-8でちょっと困ったことが発生。

マイクロソフトエクセルで編集したCSVファイルをPHPで読み込んで、
Webに表示しないといけなかったんだけど。
読み込むのは簡単だけどなぜーか文字化けする。アレレ・・・。
HTML文書で指定した文字コードはutf-8、
そしておそらくCSVから読み込んだテキストはshift-jis。
実際、ブラウザのエンコード設定をshift-jisにしたら、
CSVから読み込んだテキストは正しく表示された。

文字コードの変換は、mb_convert_encording() を使うんだけど。
ただなぜかこれでもうまくいかない。
ネットを調べまくった挙句に行き着いたところはこれ。

<?php
$csv = "k/data.csv" ;
$buf = mb_convert_encoding(file_get_contents($csv), "utf-8", "sjis-win") ;
$fp = tmpfile();
fwrite($fp, $buf);
rewind($fp);
while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
echo "<p>$data[11] $data[1] $data[4]</p>" ;
}
?>

参考サイト様は、
fgetcsv() の使い方 - PHPマニュアル
PHP5 の fgetcsv() で読み込み内容が腐る現象 - blog.plastik.jp

ちなみに、今回使用するサーバーのPHPバージョンは、4.3.11。
2番目の参考サイトはPHP5の話なので、関係ないような気はするんだけどね。
わからない事だらけで調べたいところだけど、時間もないので
今回はこれで行かせていただきます!w

タグ: , ,

コメントをどうぞ