php‎ > ‎

サーバー側でcsv形式の文字列を分解する

サーバー側で処理を行い結果を csv 形式でサーバー内に保管し、任意のタイミングでファイルマネージャーを利用して利用者にダウンロードしてもらう仕組みを作成していたが、ダウンロードしたファイルを excel で開くとエラー文字化けが発生していた。単にサーバー内ではutf-8で処理していたためにおきたことなのだが、どう対応するべきなのか判断に困った。なぜ、困ったのかというと、出力した結果はあくまでも csv ファイルであり、 excel で開くために用意しているものではないということだ。結局csvをsjisで出力することになったが、扱いというか、判断に困る内容だ。

$data_sjis=mb_convert_encoding($data, "SJIS-win", "UTF-8");


CSVファイルを書く場合はfputcsvで書けばいいだけなのでいいとして、csvファイルを読み込むときには結構面倒になる。ファイルに出力したことにしてcsv形式を配列に解析してくれる処理は以下のようになる。

$fp = fopen('php://memory', 'rw'); 
fwrite($fp, $data); 
rewind($fp); 
while (($values = fgetcsv($fp, 1000, ',', '"')) !== FALSE) {
echo $values[0].'|'.$values[1].'<br />';
}
fclose($fp); 

Comments