iCalendar を Google カレンダーに URL で追加すると文字化けする場合は header を確認する

Google カレンダーに独自で作成した iCal 形式のファイルを URL から追加すると文字化けする場合は header で下記のように Content-Type や文字コードを設定すると良いです。

1
header('Content-Type: text/calendar; charset=utf-8');

乱暴な書き方ではありますが、下記のように PHP ファイルとして作成して試してみれば読み込むことができることが分かります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php header('Content-Type: text/calendar; charset=utf-8'); ?>
BEGIN:VCALENDAR
METHOD:PUBLISH
VERSION:2.0
PRODID:-//Animemap//animemap.net//EN
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Japan
BEGIN:STANDARD
DTSTART:19390101T000000
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
TZNAME:JST
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:
DTSTAMP:20120114T001239Z
SUMMARY:テスト
DESCRIPTION:
DTSTART;VALUE=DATE:20120601
DTEND;VALUE=DATE:20120601
RRULE:FREQ=WEEKLY;INTERVAL=1;COUNT=4
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

.ics という拡張子ではないのに読み込むことが可能なのかについてですが、Content-Type を設定しているので問題ありません。これについては下記ページからの説明を引用させて頂きます。

インターネットでファイルのダウンロードを行う時等、ファイルに拡張子がなかったり、拡張子からファイルの種類が分からない場合がある。 その場合、「これから返すファイルの種類」をContent-Typeによって示すことで、ファイルの種類を受け取る側が知ることができる。またその種類に応じて、Webブラウザがそのまま表示したり、ファイルとして保存したり、他のアプリケーションを起動してそれを用いて出力したり、と処理を変更する。

下記の記事はセキュリティに問題がありますが、同じようなことをやっている記事です。文字化けの解決にはこちらを参考にさせて頂きました。

最近では URL 書き換えを行うことが多いので、実際にファイル出力する際はもっとスムーズに行えるかもしれません。

コメント

コメントは受け付けていません。