Codificam novas linhas em arquivos iCal
-
21-08-2019 - |
Pergunta
Eu estou tentando descobrir como novas linhas codificar na parte descrição de um arquivo iCal, de tal maneira que eles vão importar corretamente para o Outlook, Google Calendar e o Calendário Apple.
O código original eu herdei usado "= 0D = 0A" com uma codificação quoted-printable, que funciona muito bem no Outlook, mas não no Google Calendar.
A especificação parece dizer que você deve usar "\ n" para representar uma nova linha. Isso funciona muito bem no Google Calendar, mas Outlook apenas coloca o literal "\ n" personagens lá.
Existe uma maneira que você fez isso que irá trabalhar de forma consistente accross sistemas de calendário?
Solução
OK, parece que eu estou respondendo a minha própria pergunta.
A maneira correta de fazer isso é usar o "\ n" para quebras de linha. Outlook não reconhecer isso, porque eu tinha "encoding = citados-imprimíveis" na descrição. Uma vez eu removi que, Outlook exibidas as novas linhas corretamente.
Além disso, para obter o arquivo para abrir corretamente no Apple iCal, você precisa usar "VERSÃO: 2.0" para a versão do arquivo. Se você usar "VERSÃO: 1.0"., Ele vai dizer que você não pode ler o arquivo (mesmo que ele esteja em conformidade com a especificação 1.0)
NOTA: Como já foi mencionado, o arquivo realmente tem que conter o \n
string literal. Como a maioria das linguagens de tratar isso como uma sequência de escape que significa um caractere de nova linha, você provavelmente precisará usar o \\n
corda em seu código.
Outras dicas
O comentário com o link para o RFC de Matthew Bucket acima no post original me ajudou. Citando lá:
personagem uma barra invertida em um "texto" valor da propriedade MUST ser precedidos por um outro personagem BACKSLASH
Então, eu fiz um
$description = str_replace("\r\n", "\\n", $description);
e funcionou
Talvez valesse a pena dizer que você precisa o literal \ n, não o símbolo de nova linha, literalmente barra invertida seguida, n no iCal. Também não se esqueça de fazer o personagem 75 "dobrar" também.
Seu arquivo de saída deve ser como abaixo ---
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
Aqui você tem que cuidar de versão, deve ser 2.0 e Fuga de char ... \ n (nova linha), ponto e vírgula (;) e vírgula (,). Se você estiver escrevendo em .net, então ele deve gostar ... "\\ n", "\\"; e "\\".
Você pode verificar o arquivo de saída neste site, bem como ... http://icalvalid.cloudapp.net/
Obrigado, Bhaskar
Esta é a minha resposta para DESCRIPTION
$filev = str_replace("\r\n", '\\n', $p);
$filev = str_replace("<br>",'\\n',$filev);
$filev = (str_replace(";","\;",str_replace(",",'\,',$filev)));
De acordo com a este RFC :
linhas de conteúdo são delimitados por uma quebra de linha, que é uma sequência CRLF (caractere CR seguido pelo carácter LF).
Assim que você deve usar \r\n
. Eu usei isso em cordas sem barra invertida adicional escapar.
Eu tive que escapar a saída na cadeia para definir um literal "\ n" no arquivo de saída. Igual a. Trabalhou um charme.
$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";