Question

J'essaie de comprendre comment encoder les nouvelles lignes dans la partie DESCRIPTION d'un fichier iCal de manière à ce qu'elles soient importées correctement dans Outlook, Google Calendar et Apple Calendar.

Le code original dont j'ai hérité utilisait "=0D=0A" avec un codage imprimable entre guillemets, qui fonctionne très bien dans Outlook, mais pas dans Google Agenda.

La spécification semble dire que vous devez utiliser " " pour représenter une nouvelle ligne.Cela fonctionne très bien dans Google Agenda, mais Outlook y place simplement les caractères littéraux " ".

Avez-vous fait cela d'une manière qui fonctionnera de manière cohérente sur tous les systèmes de calendrier ?

Était-ce utile?

La solution

OK, on ​​dirait que je réponds à ma propre question.

La bonne façon de procéder est d'utiliser " " pour les sauts de ligne.Outlook ne l'a pas reconnu car j'avais "ENCODING=quoted-printable" dans la description.Une fois que j'ai supprimé cela, Outlook a affiché correctement les nouvelles lignes.

De plus, pour que le fichier s'ouvre correctement dans Apple iCal, vous devez utiliser « VERSION : 2.0 » pour la version du fichier.Si vous utilisez "VERSION:1.0", il vous dira qu'il ne peut pas lire le fichier (même s'il est conforme à la spécification 1.0).

NOTE:Comme d'autres l'ont mentionné, le fichier doit contenir la chaîne littérale \n.Étant donné que la plupart des langages traitent cela comme une séquence d'échappement signifiant un caractère de nouvelle ligne, vous devrez probablement utiliser la chaîne \\n dans votre code.

Autres conseils

Le commentaire avec le lien vers le RFC de Matthew Bucket ci-dessus dans le message original m'a aidé. Je cite là:

  

Un antislash dans une valeur de propriété « TEXT » MUST         être échappé avec un autre caractère BACKSLASH

Alors, je l'ai fait un

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

et cela a fonctionné

Peut-être la peine de dire que vous avez besoin littéral \ n, pas le retour à la ligne, la barre oblique inverse littéralement, dans le n ical. De plus, ne pas oublier de faire le 75 caractère « pliage » aussi.

Votre fichier de sortie doit être comme ci-dessous ---

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

Ici, vous devez prendre soin de la version, il devrait être 2.0 et échapper Char ... \ n (saut de ligne), point-virgule (;) et la virgule (,). Si vous écrivez en .net il devrait aimer ... « \\ n », « \\; » et "\\".

Vous pouvez vérifier votre fichier de sortie sur ce site et ... http://icalvalid.cloudapp.net/

Merci, Bhaskar

Ceci est ma réponse pour DESCRIPTION

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

Selon cette RFC :

  

lignes de contenu sont délimitées par un saut de ligne,      qui est une séquence de CRLF (caractère CR suivi par le caractère LF).

Vous devez utiliser \r\n. J'ai utilisé ce dans les chaînes sans barre oblique inverse supplémentaire s'échapper.

Je devais échapper à la sortie de la chaîne dans le fichier de sortie pour définir un littéral « \ n ». Ainsi. A travaillé un charme.

$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top