Domanda

Sto cercando di capire come codificare nuove righe nella parte descrizione di un file iCal in modo tale che essi importare correttamente in Outlook, Google Calendar e il calendario di Apple.

Il codice originale che ho ereditato usato "= 0D = 0A" con un stampabile citato codifica, che funziona alla grande in Outlook, ma non in Google Calendar.

Le specifiche sembra dire si dovrebbe usare "\ n" per rappresentare un ritorno a capo. Questa grande opera in Google Calendar, ma Outlook mette solo i "\ n" caratteri letterali in là.

C'è un modo che hai fatto questo che funziona attraversata costantemente i sistemi di calendario?

È stato utile?

Soluzione

OK, sembra che io sto rispondendo alla mia domanda.

Il modo corretto per farlo è quello di utilizzare "\ n" per interruzioni di riga. Outlook non riconoscere questo perché ho avuto "encoding = quoted-printable" sulla descrizione. Una volta ho rimosso che, Outlook visualizzato correttamente le nuove linee.

Inoltre, per ottenere il file da aprire correttamente in iCal di Apple, è necessario utilizzare "Versione: 2.0" per la versione del file. Se si utilizza "VERSIONE: 1.0"., Vi dirà che non può leggere il file (anche se è conforme alla 1.0 spec)

NOTA: Come altri hanno detto, il file ha effettivamente a contenere la stringa letterale \n. Dal momento che la maggior parte delle lingue che trattano come una sequenza di escape che significa un carattere di nuova riga, probabilmente è necessario utilizzare la stringa \\n nel codice.

Altri suggerimenti

Il commento con il link al RFC da Matteo benna sopra nel post originale mi ha aiutato. Citando da lì:

  

una barra rovesciata in un "testo" DEVE valore della proprietà         essere fuggito con un altro carattere backslash

Così, ho fatto un

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

e ha funzionato

Potrebbe valere la pena dire che è necessario il \ n letterale, non il simbolo di nuova riga, letteralmente backslash allora n in iCal. Inoltre, non dimenticare di fare il personaggio 75 "folding" troppo.

Il file di output dovrebbe essere come di seguito ---

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

Qui si deve prendere cura di versione, dovrebbe essere 2.0 e fuga char ... \ n (nuova riga), punto e virgola (;) e virgola (,). Se si sta scrivendo in .net allora vorrei ... "\\ n", "\\"; e "\\".

È possibile controllare il file di output su questo sito, nonché ... http://icalvalid.cloudapp.net/

Grazie, Bhaskar

Questa è la mia risposta per DESCRIPTION

$filev = str_replace("\r\n", '\\n', $p);
$filev = str_replace("<br>",'\\n',$filev);
$filev = (str_replace(";","\;",str_replace(",",'\,',$filev)));

questo RFC :

  

linee di contenuto sono delimitati da un'interruzione di linea,      che è una sequenza CRLF (carattere CR seguito da carattere LF).

Quindi, si dovrebbe usare \r\n. Ho usato questo nelle stringhe, senza backslash ulteriore fuga.

Ho dovuto sfuggire l'output nella stringa per impostare un letterale "\ n" nel file di output. Così. Ha lavorato un fascino.

$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top