これで光がさした

PHPと Excelの関係はなかなか厄介なものがあります それと言うのも、Excelでは昔の 16-bits DOSの名残でずっと日本語文字コードとしてはいわゆる Shift-JISを用いているのです。これは別名 CP932とも呼ばれているものです。

ビジネスの世界では、Excelがデファクト・スタンダードであり、膨大なビジネス文書でこの Shift-JISが用いられているため、今更それを世界標準の UTF-8という文字コードに変更することができないのです

要するに悪しき昔の名残を引きずっているのですね

このことが実際のブログラミングでは問題となります もっとも英語圏の人々には「何言っているの?」てなもんで関係無いのですが、我々のように日本語を用いていると即刻問題となるのです。

何故ならばデータベースからデータを取得し、それを加工してから表計算ファイルに出力しても、その出力は UTF-8でされるので、Shift-JISで開く Excelでは途端に文字化けするのです。これを防ぐためには勿論、Excelが UTF-8を正しく読み取れれは良いのですが、それがそうは行かないのです。あるいは UTF-8から Shift-JISに変換してファイルに書き込めばいいはずですが、それまで自分で試したブログラムではなかなかうまく行かないのです。

しかし、今回ようやくめぐり逢いました それはこんなテスト・プログラムで検証しました

// https://qiita.com/ikemonn/items/f2bc4f9f834c989084ff
$rows[ 0 ][ 0 ] = "00";
$rows[ 0 ][ 1 ] = "齋藤 滋";
$rows[ 0 ][ 2 ] = "齋藤 滋です";
$rows[ 1 ][ 0 ] = "10";
$rows[ 1 ][ 1 ] = "SAITO SHIGERU";
$rows[ 1 ][ 2 ] = "さいとう";

$header = "Content-Type: text/plain";
$fp = fopen( 'isample.csv', 'w' );
stream_filter_prepend( $fp, 'convert.iconv.utf-8/cp932' );
fputcsv( $fp, $header );
foreach ( $rows as $row ) {
  fputcsv( $fp, $row );
}
fclose( $fp );

これでバッチリです。

もちろんこのコードのままですと、Excel内部でも csv形式となっているので、これを Excel標準形式で saveすればよいのです。

投稿者: (KAMAKURA & SAPPORO)Dr_Radialist

Expert Interventional Cardiologist and Amateur Computer Programmer

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です