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>';
}
}
?>
タグ:csv, Mac, PHP, PHP, エンコーディング



コメントはまだありません。