2011年5月16日月曜日

Excel で開く CSVファイルを UTF-8 で出力(PHP)

PHPでExcel用に出力するCSVファイルをSJISで出力すると「~」などの一部文字が文字化けしてしまいます。

そこで、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なしで記述してください。

YHP2011実施中

一時休止していたYHP2011でしたが、再開して6/7までキャンペーン中です。

2011年5月2日月曜日

PHPで半角カタカナも機種依存文字もそのままメール送信

PHPで、mb_send_mail() を使ってメールを送信していましたが、
半角カタカナや①や㎡など機種依存文字が入ると?に文字化けする問題がありました。

iso-2022-jp で扱うことができないことになっているので、
普通ならば iso-2022-jp で扱える形式に変換するところですが、
思い切って無視して「そのまま」送信することで今回問題回避しました。

参考にしたのは次のサイト
http://d.hatena.ne.jp/u87/20100308/

mb_language('ja');
mb_internal_encoding('UTF-8');
$e_subject = mb_encode_mimeheader($subject);
$e_body = mb_convert_encoding($body, 'ISO-2022-JP-MS');
$mail_header = "From: ".mb_encode_mimeheader(mb_convert_encoding("フロム","JIS","UTF-8"))."<".$from.">"."\n";
$mail_header .= "Content-Type: text/plain; charset=ISO-2022-JP\r\n";
$mail_header .= "Content-Transfer-Encoding: 7bit";
mail($to, $e_subject, $e_body, $mail_header, "-f $from");

ポイントは mb_send_mail()を使わずに、mail()を使います。
また、iso-2022-jp を宣言しておいて、iso-2022-jp-ms で変換します。
一般的な日本語環境であれば、問題なく文字化けのないメールを見ることができると思います。

2011年4月4日月曜日

お名前.comでGoogle Apps DKIM送信ドメイン認証

Appsで、送信ドメイン認証(DKIM)を設定します。
Google Apps 管理ページ → 高度なツール → メールを認証

表示されるテキストをDNSサーバーに登録します。

うちの場合、お名前.com (01.dnsv.jp) で、先日まで(_)アンダーバー入りの登録は不可でしたが、いつの間にかできるようになっていました。

2011年4月1日金曜日

Google Cloud Connectが日本語化

先日、インストール記事を書いた Google Cloud Connect ですが、正式に日本語化したようです。


旧バージョンがインストール済みであれば、Officeアプリを立ち上げるだけでアップデートされます。

2011年3月30日水曜日

WordPressを自動更新できるように

WordPress の自動更新機能は、FTPを利用しています。
AWS で FTP を使いたくない場合でも、以下の設定で自動更新できるようになります。

wp-config.php ファイルに以下を追加します
define('FS_METHOD','direct');
次にWordPressディレクトリにて、apacheにグループ権限を与えます。
$ cd /var/www/html/wordpress
$ chgrp -R apache *
$ chmod -R g+rwX *

以下の記事を参考にしました。

ARGtek ARG-1206 を初期化

入手時に初期化されてなくて、ちょっとハマったのでメモ。

電源を入れて、背面のリセットスイッチを10秒程度押し続けると
リセットランプが点滅して初期化が始まります。

メーカーページ
http://www.argtek.com/detail/239582/239582.html