57

Outlook、Google カレンダー、Apple カレンダーに正しくインポートされるように、iCal ファイルの記述部分の改行をエンコードする方法を見つけようとしています。

私が継承した元のコードでは、"=0D=0A" を引用印刷可能なエンコーディングで使用していました。これは、Outlook ではうまく機能しますが、Google カレンダーでは機能しません。

仕様では、改行を表すには「\n」を使用する必要があるようです。これは Google カレンダーではうまく機能しますが、Outlook では文字どおりの「\n」文字が挿入されるだけです。

カレンダーシステム全体で一貫して機能するこれを行った方法はありますか?

4

8 に答える 8

58

OK、私は自分の質問に答えているようです。

これを行う正しい方法は、改行に「\n」を使用することです。説明に「ENCODING=quoted-printable」が含まれているため、Outlookはこれを認識しませんでした。それを削除すると、Outlookは新しい行を正しく表示しました。

また、Apple iCalでファイルを正しく開くには、ファイルのバージョンに「VERSION:2.0」を使用する必要があります。「VERSION:1.0」を使用すると、ファイルを読み取ることができないことが通知されます(1.0仕様に準拠している場合でも)。

注:他の人が述べているように、ファイルには実際にはリテラル文字列が含まれている必要があります\n。ほとんどの言語はこれを改行文字を意味するエスケープシーケンスとして扱うため、\\nコードで文字列を使用する必要があります。

于 2009-03-20T17:59:28.573 に答える
36

上記の元の投稿の Matthew Bucket からの RFC へのリンクを含むコメントは、私を助けてくれました。そこから引用:

「TEXT」プロパティ値のバックスラッシュ文字は、別のバックスラッシュ文字でエスケープする必要があります

だから、私はやった

$description = str_replace("\r\n", "\\n", $description);

そしてそれは働いた

于 2012-09-03T13:39:37.783 に答える
23

改行記号ではなく、リテラル\ nが必要であり、文字通りバックスラッシュしてからicalでnが必要であると言う価値があるかもしれません。また、75文字の「折りたたみ」も忘れずに行ってください。

于 2011-08-08T20:34:25.613 に答える
0

出力ファイルにリテラル "\n" を設定するには、文字列内の出力をエスケープする必要がありました。そのようです。魅力的でした。

$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";
于 2012-03-22T19:51:07.677 に答える