ダウンロードしたiCalデータ(バイナリ)をエディタで開いてみて何が問題なの一次的な原因が分かりました.
「iCalendarデータはプレーンテキストで、デフォルトでUTF-8が使用される。別の文字コードを使うときは「charset」MIMEパラメータで指定することができる。各行は CR + LF (16進:0D0A) で改行され、各行75オクテットの文字数制限がある。次の行にまたぐ場合はスペース (16進:20) またはタブ (16進:09)で行を始めることで、前行からの続きであることを明示できる。データ項目内での改行をしたい場合は「バックスラッシュ + N」(UTF-8で5C6Eまたは5C4E。日本語環境では「¥n」)でコーディングする。」(Wikipediaより).
75オクテットに切る際に,マルチバイトが(私のいま手元にあるデータは)途中でぶった切られています.ありがちですね.
DESCRIPTION:<p>●担当者会議(平成21年度第1回)</p>\n<p>(・
)日時:平成21年4月13日(月)16時30分~18時(予定)<b
赤い・の部分は文字化けです.kagoさんの”全部□になる”前の段階(フェッチに失敗)ですので,まずはここを直してから次に進みます.もしかして,GoogleカレンダーはシフトJISで読み込む前提になっている?
日本語のdescriptionが不正な位置で分断されるのは,多分,ここが原因でしょう.
lib/bennu/iCalendar_rfc2445.php
function rfc2445_fold()
function rfc2445_fold($string) {
if(strlen($string) <= RFC2445_FOLDED_LINE_LENGTH) {
return $string;
}
$retval = '';
while(strlen($string) > RFC2445_FOLDED_LINE_LENGTH) {
$retval .= substr($string, 0, RFC2445_FOLDED_LINE_LENGTH - 1) . RFC2445_CRLF . ' ';
$string = substr($string, RFC2445_FOLDED_LINE_LENGTH - 1);
}
$retval .= $string;
return $retval;
}
頭のところで,
define('RFC2445_FOLDED_LINE_LENGTH', 75);
このように定義されています.
それとも,完全にUTF-8のバイナリと考えられて,このような分断は全く機にならずに先方で組み立てられるというのではあれば問題は無いのかも知れません.ですので,まだここを修正するのは待ったほうが良いでしょう.