質問
私は、彼らは、Outlook、GoogleカレンダーとAppleのカレンダーに正しくインポートされますようにiCalのファイルの説明部分で改行をエンコードする方法を理解しようとしています。
私は継承元のコードは、Outlookではなく、Googleカレンダーで素晴らしい作品quoted-printableのエンコーディングで "= 0D = 0A" を使用ます。
スペックは、あなたが改行を表すために「\ n」を使用する必要があると言っているようです。これは、Googleカレンダーで素晴らしい作品が、Outlookはただそこにリテラル「\ n」は文字を置きます。
あなたは一貫カレンダーシステムをaccross動作するようにこれをやった方法はありますか?
解決
私は自分の質問に答えるてるようOK、見えます。
それを行うための正しい方法は、改行のために「\ n」を使用することです。私が持っていたため、Outlookはこれを認識していなかった「ENCODING = quoted-printableの」記述に。私はそれを削除すると、Outlookが正しく新しい行を表示します。
ファイルバージョンのために:また、アップルのiCalで正しく開くファイルを取得するには、「バージョン2.0」を使用する必要があります。あなたは「VERSION:1.0」を使用している場合、それは(それが1.0仕様に準拠していても)、それはファイルを読み取ることができないことを教えてくれます。
。注:他の人が述べたように、ファイルが実際にリテラル文字列\n
を含有しなければなりません。ほとんどの言語は、エスケープシーケンスとして改行文字を意味することを扱いますので、あなたはおそらく、あなたのコード内の文字列\\n
を使用する必要があります。
他のヒント
オリジナルのポストで上記のマシュー・バケットからRFCへのリンクとコメントが助けてくれました。そこから引用ます:
「TEXT」プロパティ値のMUSTでバックスラッシュ文字 別のバックスラッシュでエスケープする
だから、私は
$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/ >
おかげで、 Bhaskar
このはDESCRIPTION
ための私の答えです。
$filev = str_replace("\r\n", '\\n', $p);
$filev = str_replace("<br>",'\\n',$filev);
$filev = (str_replace(";","\;",str_replace(",",'\,',$filev)));
によると、このRFCするます:
コンテンツ行が改行で区切られ、 これはCRLFシーケンス(LF文字が続くCR文字)である。
ですから、\r\n
を使用する必要があります。私は、追加のバックスラッシュをエスケープせずに文字列でこれを使用します。
私は、出力ファイルにリテラル「\ n」を設定する文字列で出力をエスケープする必要がありました。そのようです。魅力を働いています。
$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";