スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PHPでユニコードなCSV出力

以前ruby版のプログラムを作りましたが、そのPHP版です。
ユニコードが使われたデータのCSVの出力が可能です。
<?php
class CsvMaker
{
private $dataAry;
private static $LINE_SEPARATOR = "\r\n";
private static $COLUMN_SEPARATOR = "\t";

public function __construct($dataAry) {
$this->
dataAry = $dataAry;
}

private function makeResult() {
$result = '';
foreach ($this->dataAry as $row) {
$first = true;
foreach ($row as $column) {
if ($first) {
$first = false;
} else {
$result .= self::$COLUMN_SEPARATOR;
}
$result .= $this->makeColumn($column);
}
$result .= self::$LINE_SEPARATOR;
}
return $result;
}

private function makeColumn($src) {
$result = preg_replace('/"/u', '""', $src);
return '"' . $result . '"';
}

public function output($fileName) {
ob_end_clean();
ob_start();

header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
header('Cache-Control: max-age=0');
echo chr(255).chr(254);
echo mb_convert_encoding($this->makeResult(), "UTF-16LE", "UTF-8");
}
}


public function actionTest() {
$dataAry = [["a,b\r\nc", "ef\tg", "h\nij"],["ʕ•̫͡•ʔ", "1\"2\"3", "456"]];
$csv = new CsvMaker($dataAry);
$csv->output('予定表〜①ハンカクだ');
}
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。