Google カレンダーでiCal形式を読み込むと文字化け

Googleカレンダーにical形式(*.ics)のファイルを別カレンダーとして登録したときに文字化けしていた原因が分かりました。

Googleカレンダーではレスポンスのヘッダーに文字コードを指定しないと駄目らしい。ここのブログで教えてもらった。

icalが置いてあるディレクトリの.htaccessに
addtype text/calendar; charset=utf-8
を記述してみたりしたけど駄目だったので、PHPでさくっと作りました。

<?php
header('Content-Type: text/calendar; charset=utf-8');
$sFile = $_GET['ical'];
readfile($sFile);
?>

このファイルをical.phpとすると
http://www.hoge.com/ical.php?ical=suganuma.ics
というアドレスをGoogleカレンダーに設定すると、文字化けせずicalファイルを読み込んでくれます。

Googleカレンダーは携帯でもみれるので、これで会社のスケジュールをいつでも携帯から閲覧可能に。ちなみにGoogleカレンダーの携帯用アドレスは

http://www.google.com/calendar/m

<2008/09/16 追記>
コメントで指摘がありましたが、上のコードはあまりにセキュリティがダメダメなので各自'ics'ファイルに限定するとか、やってください。

<2009/08/28 追記>
一応備忘録のために修正版をアップ。

<?php
$sFileName = $_GET['ical'];
if (strpos($sFileName, '.ics') === false) {
    $sFileName .= '.ics';
}
if (file_exists($sFileName)) {
    header('Content-Type: text/calendar; charset=utf-8');
    readfile($sFileName);
}