WEB/システム/IT技術ブログ

PHP関数「fgetcsv」で日本語が欠落するサーバ依存の問題

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ファイルを直接開いて置換をかけたり、プログラムに「”」で囲む処理を追加したりなどの手間を考慮すると、とりあえず前者で問題ないように思います。

B!

Comment

コメントはありません

コメントする

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives