CSVファイルを読み込むPHPスクリプトで実行結果が文字化けする場合、CSVファイルの文字コードを確認してみましょう。
<?php $fp = fopen("test.csv", "r"); while (!feof($fp)) { $line = fgetcsv($fp); echo "名前:$line[0] 出身:$line[1]<br />"; } ?>
西沢直木,千葉県 鈴木一郎,東京都
実行結果は次のように文字化けする場合があります。
典型的な原因はExcelから作成したCSVファイルです。Excelで作成したCSVファイルは通常、文字コードがShift-JISになっているはずです。
簡単な対策は、このShift-JISのCSVファイルをUTF-8で保存することです(UTF-8で入出力している前提です)。
または、読み取ったCSVファイルの行の文字コードを変換する方法があります。次の例では、配列の文字コードを変換できるmb_convert_variables関数を使ってCSVのデータの文字コードをShift-JISからUTF-8に変換しています。
<?php $fp = fopen("test.csv", "r"); while (!feof($fp)) { $line = fgetcsv($fp); mb_convert_variables("UTF-8", "SJIS", $line); echo "名前:$line[0] 出身:$line[1]<br />"; } ?>
表示結果は次のようになります。