PHP5でfgetcsv()の動きが怪しい
開発環境で正常に動作していたCSVファイル読込みシステムが、
検証環境で日本語の記述が読み込めないという不具合に見舞われました。
具体的には、日本語で記述された部分(つまりマルチバイト)がスキップされる。
開発・検証環境ともにPHP5、iniファイルなどはまったく同じものを使用しているのに・・。
で、いろいろ調べてみるとPHP5環境ではfgetcsvの文字読込み動作に問題があるという情報が。
dara-jさん fgetcsvでハマってみたり
で、下記のようなコードで対処してみました。
検証環境で日本語の記述が読み込めないという不具合に見舞われました。
具体的には、日本語で記述された部分(つまりマルチバイト)がスキップされる。
開発・検証環境ともにPHP5、iniファイルなどはまったく同じものを使用しているのに・・。
で、いろいろ調べてみるとPHP5環境ではfgetcsvの文字読込み動作に問題があるという情報が。
dara-jさん fgetcsvでハマってみたり
で、下記のようなコードで対処してみました。
// CSVファイルパス
$csv_fp = "test.cvs";
// エンコード変換
$buf = mb_convert_encoding(file_get_contents($csv_fp),"utf-8","sjis-win");
// 文字化け制御で仮保存
$fp = tmpfile();
fwrite($fp,$buf);
rewind($fp);
// 文字化け対策でローケル情報設定(for PHP5)
$enc = mb_internal_encoding();
$enc_str = sprintf("ja_JP.%s",$enc);
setlocale(LC_ALL,$enc_str);
//-- 読込み開始
while (($data = fgetcsv($fp,1024,",")) !== FALSE) {
読込み処理
}
$csv_fp = "test.cvs";
// エンコード変換
$buf = mb_convert_encoding(file_get_contents($csv_fp),"utf-8","sjis-win");
// 文字化け制御で仮保存
$fp = tmpfile();
fwrite($fp,$buf);
rewind($fp);
// 文字化け対策でローケル情報設定(for PHP5)
$enc = mb_internal_encoding();
$enc_str = sprintf("ja_JP.%s",$enc);
setlocale(LC_ALL,$enc_str);
//-- 読込み開始
while (($data = fgetcsv($fp,1024,",")) !== FALSE) {
読込み処理
}
コメント
コメントの投稿
« PostgreSQLへの接続数を確認する l Home l PHPでエクセルファイルを読み込む / Spreadsheet_Excel_Reader »