LoginSignup
14
12

More than 5 years have passed since last update.

多言語なcsvをペッてしたかっただけなんだよう

Last updated at Posted at 2012-08-24

無駄に半日費やしました。
iconvってなんですかmb_convert_encodingが使えないから絶望してたらiconvで一発解決じゃないですかーやだー!

というどうでもいい前置きは置いといて、本題。
多言語な内容のcsvをPHPで吐き出すのに、どうしたら文字化けないか。ってことです。

答え。

BOM付きUTF-16LEでTAB区切りでペッってしましょう。
(余談ですが、TAB区切りはtsvって言うそうですね。)

これならWindowsでもMacでもダブルクリックでExcelさんに読み込ませてもちゃんと読み込まれます。

csv.php
<?php
header('Content-Encoding: UTF-16LE');
header('Content-type: text/csv; charset=UTF-16LE');
header('Content-Disposition: attachment; filename=file.csv');

$bom = chr(255) . chr(254); //BOM

//以下お好みのレイアウトでテキストを生成してください。
$txt = "あああ\tいいい\tううう\n";
$txt .= "えええええ\tお。";

//mb_convert_encodingが使えるならそっちでもいいでしょう。
echo $bom . iconv("UTF-8", "UTF-16LE", $txt);

exit();

とりあえずこれで、ブラウザでアクセスするとfile.csvをペッってしてくれます。
エスケープ処理とかは頑張ってください!

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12