Pages

2017年6月19日月曜日

fgetcsv で取り込めない問題発生

"能","<p>
あ</p>",""

上記のような3列で1行のSJISのCSVがあった場合、 SJISのロケール追加して、

$ locale -a | grep -i ja
ja_JP
ja_JP.SJIS
ja_JP.eucjp
ja_JP.sjis
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc
japanese.sjis

という環境であっても、

setlocale(LC_ALL, 'ja_JP.SJIS');

をした後に、fgetcsv() を利用して正常にCSVが取り込むことができない。
別の方法もあった気がしたけど、忘れてしまったのでので今回対応方法をメモ。
考え方としてはiconvコマンドを利用して、SJISファイルをUTF8ファイルに変換してからPHPで取り込むという方法。

exec("iconv -f sjis-win -t utf-8 " . $path . " -o " . $path);
$handle = fopen($path, "r");
$row = fgetcsv($handle, 1024, ',', '"');

Followers