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?
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)));
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";