代码之家  ›  专栏  ›  技术社区  ›  Eric Petroelje

在iCal文件中编码换行符

  •  40
  • Eric Petroelje  · 技术社区  · 16 年前

    我正试图找出如何在iCal文件的描述部分对新行进行编码,以便它们能够正确导入到Outlook、Google日历和Apple日历中。

    我继承的原始代码使用了带引号的可打印编码“=0d=0a”,这在Outlook中很有用,但在Google日历中却不行。

    规范似乎建议您使用“\n”来表示换行符。这在Google日历中很有用,但Outlook只是将文字\n“字符放在其中。

    有没有一种方法可以让你在整个日历系统中持续工作?

    7 回复  |  直到 6 年前
        1
  •  36
  •   Eric Petroelje    6 年前

    好吧,看起来我在回答我自己的问题。

    正确的方法是将“\n”用于换行。Outlook无法识别这一点,因为描述中有“encoding=quoted printable”。删除后,Outlook将正确显示新行。

    此外,要使文件在Apple iCal中正确打开,您需要对文件版本使用“version:2.0”。如果您使用“版本:1.0”,它将告诉您它不能读取文件(即使它符合1.0规范)。

    注意:正如其他人提到的,文件实际上必须包含文本字符串 \n . 由于大多数语言都将其视为表示换行符的转义序列,因此您可能需要使用字符串 \\n 在您的代码中。

        2
  •  27
  •   periklis    12 年前

    上面原始帖子中马修·巴克特(MatthewBucket)链接到RFC的评论帮助了我。从这里引用:

    “文本”属性值中的反斜杠字符必须 用另一个反斜杠字符转义

    所以,我做了一个

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

    它起作用了

        3
  •  21
  •   Tony Johnson    13 年前

    可能值得一提的是,您需要的是字面\n,而不是换行符,字面反斜杠,然后是iCal中的n。也不要忘记做75个字符的“折叠”太。

        4
  •  6
  •   Dave James Miller    11 年前

    您的输出文件应该如下所示---

    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和escape char…\ n(换行符)、分号(;)和逗号(,)。如果您在.NET中写作,那么它应该像……”\\ n“\;”和“\”,。

    你也可以在这个网站上查看你的输出文件… http://icalvalid.cloudapp.net/

    谢谢, 巴斯卡尔

        5
  •  2
  •   rene    7 年前

    这是我的答案 DESCRIPTION

    $filev = str_replace("\r\n", '\\n', $p);
    $filev = str_replace("<br>",'\\n',$filev);
    $filev = (str_replace(";","\;",str_replace(",",'\,',$filev)));
    
        6
  •  1
  •   Serhii Maksymchuk    7 年前

    根据 this RFC :

    内容行由换行符分隔, 它是一个CRLF序列(CR字符后跟LF字符)。

    所以你应该使用 \r\n . 我在没有附加反斜杠转义的字符串中使用了这个。

        7
  •  0
  •   Josh Brule    13 年前

    我必须转义字符串中的输出,以便在输出文件中设置一个“n”。像这样。发挥魅力

    $events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";