そこで、UTF-8(BOMあり/BOM付き)で出力することで、最近のExcelなら文字化けせずに開くことができるようになります。
(古いバージョンでも「外部データの取り込み」でOKという情報あり(未確認))
BOM付きにするには、ファイルの先頭に 0xEF, 0xBB, 0xBF を入れてあげるだけです。
以下のサンプルコードは、mysqlからテーブルを取得して、CSVに出力するというものです。
<?php
$filename = "csvtest" . date("YmdHis", time() ) . ".csv";
$col_separator = ",";
$row_separator = "\n";
$title = array("あ","い","う");
header("Content-Type: text/tab-separated-values");
header("Content-Disposition: attachment; filename=$filename");
// BOM 付き
print(pack('C*',0xEF,0xBB,0xBF));
print(implode($col_separator, $title));
print($row_separator);
// DB接続
$conn = mysql_connect('hoge.hoge', 'db', 'pass') or die(mysql_error());
mysql_query("SET NAMES utf8", $conn);
mysql_select_db('db') or die(mysql_error());
// data取得クエリの作成
$query = "SELECT `あ`,`い`,`う`
FROM `hogetable`";
// クエリの実行
$res = mysql_query($query);
$out = fopen('php://output', 'w');
// 結果を出力します。
while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
fputcsv($out, $row);
}
fclose($out);
// 結果セットを開放し、接続を閉じます。
mysql_free_result($res);
mysql_close($conn);
?>
※ややこしいですが、PHPファイルはBOMなしで記述してください。
0 件のコメント:
コメントを投稿