Outlook、Googleカレンダー、およびApple Calendar。
私が継承した元のコードでは、「= 0D = 0A」とquoted-printableエンコーディングを使用していましたが、これはOutlookでは機能しますが、Googleカレンダーでは機能しません。
仕様では、改行を表すには「\ n」を使用する必要があると記載されているようです。これはGoogleカレンダーでうまく機能しますが、Outlookはリテラルの「\ n」文字をそこに配置するだけです。
カレンダーシステム全体で一貫して機能する方法はありますか?
はい、私は自分の質問に答えているようです。
正しい方法は、改行に「\ n」を使用することです。説明に「ENCODING = quoted-printable」と記載されていたため、Outlookはこれを認識しませんでした。それを削除すると、Outlookは新しい行を正しく表示しました。
また、Apple iCalでファイルを正しく開くには、ファイルバージョンに「VERSION:2.0」を使用する必要があります。「VERSION:1.0」を使用すると、ファイルを読み取ることができません(1.0仕様に準拠していますが)。
注:他の人が述べたように、ファイルには実際にはリテラル文字列\n
が含まれている必要があります。ほとんどの言語ではこれを改行文字を意味するエスケープシーケンスとして扱うため、コードでは文字列\\n
を使用する必要があります。
元の投稿にある上記のMatthew BucketからのRFCへのリンクを含むコメントが役に立ちました。そこから引用:
「TEXT」プロパティ値のバックスラッシュ文字は、別のバックスラッシュ文字でエスケープする必要があります
だから、私はやった
$description = str_replace("\r\n", "\\n", $description);
そしてそれはうまくいった
改行記号ではなくリテラル\ nが必要であり、icalで文字どおりバックスラッシュとnが必要であることを言う価値があるかもしれません。また、75文字の「折りたたみ」を行うことも忘れないでください。
出力ファイルは以下のようになります---
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//2013//#Ur Site Name#//EN
BEGIN:VEVENT
UID:[event]2012
DTSTART:20130101T100000
DTEND:20130101T120000
LOCATION:
SUMMARY:#Meeting Title here#
DESCRIPTION:What is realistic for financial services companies to achieve via Social Media channels? \n\nJoin us on 11th September 2013 at 4pm (BST) where we
-----bla bla bla ----
END:VEVENT
END:VCALENDAR
ここでは、バージョンに注意する必要があります。バージョン2.0とエスケープ文字...\n(改行)、セミコロン(;)、コンマ(、)である必要があります。あなたが.netで書いているなら、それは... "\\ n"、 "\\;"のようになります。および「\\」。
このサイトで出力ファイルを確認することもできます... http://icalvalid.cloudapp.net/
ありがとう、バスカー
これがDESCRIPTION
に対する私の答えです
$filev = str_replace("\r\n", '\\n', $p);
$filev = str_replace("<br>",'\\n',$filev);
$filev = (str_replace(";","\;",str_replace(",",'\,',$filev)));
このRFC によると:
コンテンツ行は、CRLFシーケンス(CR文字の後にLF文字が続く)である改行で区切られます。
したがって、\r\n
を使用する必要があります。これを追加のバックスラッシュエスケープなしの文字列で使用しました。
文字列の出力をエスケープして、出力ファイルにリテラル「\ n」を設定する必要がありました。そのようです。魅力的に働いた。
$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";