PHPを使ってcsvファイルを読み込むとき、ちょっと戸惑ったことを覚書です。

1.macで作ったcsvはうまく表示出来ない

csvはSJISなので「mb_convert_encoding」でUTF-8へエンコーディングします。ここまでは普通です。
会社で勉強で作った時はwinだったので、それだけでOKでした。
でも、macで作ったcsvだと「5C問題」っていうのがあって、そのままだとうまく表示できませんでした。
ので、調べました。

PHPのfgetcsvでMacのやつやSJISのやつを扱うとき
「mb_convert_encoding」をする前に「ereg_replace」で文字置換でしてやって、その置換後のファイルを改めてエンコーディングするってことです。
ふ~そうなんや~って感じです。
macとwin やっぱり色々違うもんです。

2.csvファイルにHTMLが含まれている場合

これがなんだか迷ったのですが、調べていくうちに、
テンポラリファイルというものを作って、その中に上でエンコーディングし終えたファイルを入れ込み、
それをfgetcsvという命令で1列づつ取り出していく方法が簡単そうでした。

とりあえず、今回ぶつかった壁はこの2つです。

出来たプログラムはこんな感じ

<?php

$row = 0;

$file = file_get_contents("post.csv");
$file = ereg_replace("\r\n|\r|\n","\n",mb_convert_encoding($file,"UTF-8","SJIS-win"));
$fp = tmpfile();
fputs($fp,$file);
fseek($fp,0);

while (($data = fgetcsv($fp)) !== false) {
	$row++;
	if($row > 1 ){
		echo '<p>'.$data[0].'</p>';
		echo '<p>'.$data[1].'</p>';
		echo '<p>'.$data[2].'</p>';
		echo '<p>'.$data[3].'</p>';
		echo '<p>'.$data[4].'</p>';
		echo '<p>'.$data[5].'</p>';
		echo '<p>'.$data[6].'</p>';
	}
}
?>
タグ:, , , ,

関連する投稿