CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています

Webから得た情報をCSVファイルに出力するシステムを、先日引越しいたしました。
そしたら大問題が発生。なんとCSVファイルのデータで日本語だけが消失してしまったのです。

デバッグしてみたところ、ファイルの読み込みで失敗していました。
関数「fgetcsv()」でデータを読み込み、プログラムで処理した後、再び関数「fputcsv()」で同一ファイルに書き込むということをしていたのですが、読み込みの時点で日本語が欠落していました。

Webで調べてみるとすぐに原因が分かりました。
どうやら「fgetcsv()」はローカル設定に依存しているようです。つまり、今回の私の場合は、引越し前後のサーバ設定が異なっていたために、このような問題が発生したようです。

このような場合、以下のようにして「fgetcsv()」が呼ばれる前に、「setlocale()」でサーバ設定を「UTF-8」に変更してしまいます。

setlocale(LC_ALL,'ja_JP.UTF-8');
while (($data = fgetcsv($this->fp)) !== FALSE) {
	/* 処理 */
}

その他にもCSVデータの日本語をダブルクォーテーション「”」で囲むなどして回避できるようですが、CSVファイルを直接開いて置換をかけたり、プログラムに「”」で囲む処理を追加したりなどの手間を考慮すると、とりあえず前者で問題ないように思います。

このエントリーをはてなブックマークに追加

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Monthly Archives

Search