クライアントが一部の MySQL データを Excel で表示できるようにしようとしています。次のように、PHPの fputcsv() 関数を使用しました。
public function generate() {
setlocale(LC_ALL, 'ko_KR.UTF8');
$this->filename = date("YmdHis");
$create = $this->directory."Report".$this->filename.".csv";
$f = fopen("$create","w") or die("can't open file");
fwrite($f, "\xEF\xBB\xBF");
$i = 1;
$length = count($this->inputarray[0]);
fwrite($f, $this->headers."\n");
// print column titles
foreach($this->inputarray[0] as $key=>$value) {
$delimiter = ($i == $length) ? "\n\n" : ",";
fwrite($f, $key.$delimiter);
$i++;
}
// print actual rows
foreach($this->inputarray as $row) {
fputcsv($f, $row);
}
fclose($f);
}
私のクライアントは韓国人で、MySQL データベースのかなりの部分に utf8_unicode_ci の値が含まれています。上記の関数を使用して、正しくエンコードされたデータを含む CSV ファイルを正常に生成し、自分のマシン (英語では Win7) の Excel では正常に開きますが、クライアント コンピューター (韓国語では Win7) の Excel でファイルを開くと、文字がまた壊れました。ヘッダー (\xEF\xBB\xBF) を取り出し、setlocale をコメントアウトしようとしましたが、役に立ちませんでした。
これを理解するのを手伝ってもらえますか?