【PHP】fputcsvとmb_str_replace

PHPのfputcsvのデキが悪いので、自作関数を作る必要があるようだ。
mb_str_replace.phpが必要なのでダウンしておく。

  • 1と2番目の引数はオリジナルのfputcsvと同じ。最初がファイルポインタ、次が値の配列
  • 3番目は対象データの文字コード。省略時は内部エンコーディング(mbstring.internal_encoding)
  • 項目は全てダブルクォーテーションで括られます
  • 項目内のダブルクォーテーションはダブルクォーテーションでエスケープされます
function _fputcsv($fp, $data, $encoding="") {
	require_once 'mb_str_replace.php';

	$csv = '';
	foreach ($data as $col) {
		$col = mb_str_replace('"', '""', $col, $encoding);
		$csv .= "\"$col\",";
	}
	$csv = preg_replace("/,$/", "", $csv);
	fwrite($fp, "$csv\r\n");
}

参考サイト
http://techracho.bpsinc.jp/baba/2010_03_01/1172
http://fetus.k-hsu.net/document/programming/php/mb_str_replace.html

fgetcsv+Shift-JIS

SJISのCSVをfgetcsvで読み込んでも、まず間違いなくバグる。
EUCやUTF-8のCSVなら上手くいく。
というわけで、CSVファイルを開く時に文字コードを変換してからfgetcsvを使ってみたらどうか。


$fp = fopen("php://filter/convert.mbstring.encoding.SJIS-win:UTF-8/resource=example.csv", "r");

カテゴリー PHP

コメントをどうぞ~