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?

Foi útil?

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";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top