2009-03-20 9 views
34

Estoy tratando de descubrir cómo codificar nuevas líneas en la parte de DESCRIPCIÓN de un archivo de iCal de tal manera que se importarán correctamente en Outlook, Google Calendar y el calendario de Apple.Codificación de líneas nuevas en archivos de iCal

El código original que heredé utilizó "= 0D = 0A" con una codificación imprimible entre comillas, que funciona muy bien en Outlook, pero no en el Calendario de Google.

Parece que la especificación indica que debe usar "\ n" para representar una nueva línea. Esto funciona muy bien en Google Calendar, pero Outlook solo pone los caracteres literales "\ n" ahí.

¿Hay alguna forma de hacerlo que funcione sistemáticamente en los sistemas de calendario?

+2

La parte de la especificación de iCal en cuestión es: http://tools.ietf.org/html/rfc5545#section-3.3.11 –

Respuesta

31

OK, parece que estoy respondiendo mi propia pregunta.

La forma correcta de hacerlo es usar "\ n" para los saltos de línea. Outlook no reconoció esto porque tenía "ENCODING = quoted-printable" en la descripción. Una vez que eliminé eso, Outlook mostró las nuevas líneas correctamente.

Además, para que el archivo se abra correctamente en Apple iCal, debe usar "VERSIÓN: 2.0" para la versión del archivo. Si usa "VERSIÓN: 1.0", le dirá que no puede leer el archivo (incluso si cumple con la especificación 1.0).

+1

para cualquier persona que haya añadido \ n para crear una nueva línea y aún así no funcionó , Terminé usando \\ n como lo señala @periklis –

19

Puede valer la pena decir que necesita el símbolo literal \ n, no el símbolo de nueva línea, literalmente barra invertida, y luego n en el ical. Tampoco olvides hacer los 75 caracteres "doblados" también.

0

Tuve que escapar de la salida en la cadena para establecer un literal "\ n" en el archivo de salida. Al igual que. Trabajó un encanto.

$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n"; 
21

El comentario con el enlace a la RFC de Matthew Bucket anterior en la publicación original me ayudó. Citando a partir de ahí:

una barra invertida en un valor de la propiedad "TEXTO" DEBE se escapó con otro carácter de barra invertida

Por lo tanto, hice un

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

y funcionó

+0

La cotización y el código no parecen coincidir. El código reemplaza las alimentaciones de línea de Windows con secuencias literales '\ n'. –

+2

Esto es increíblemente raro al ver '\\ n' y casi imposible de comprender correctamente. En .NET land creé 'const string textLineFeed = @" \ "+" n ";' –

+0

Tu solución fue la bala mágica para mí. Probé todos los demás en esta página sin éxito. Gracias. – Krafty

6

Su archivo de salida debe ser como el siguiente ---

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 

Aquí tiene que cuidar la versión, debería ser 2.0 y Escape char ... \ n (nueva línea), punto y coma (;) y coma (,). Si está escribiendo en .net, debería gustarle ... "\\ n", "\\;" y "\\".

Puede verificar también su archivo de salida en este sitio ...http://icalvalid.cloudapp.net/

Gracias, Bhaskar

+0

+1 para el validador, y también mencionar los otros caracteres que necesitan escaparse –

+0

Las líneas no deben contener más de 75 caracteres: http://tools.ietf.org/html/rfc5545#section-3.1 – ofaurax

+0

El validador mencionado en la respuesta ya no está disponible. Aquí hay otros dos, que dan resultados diferentes (pero razonables en ambos casos): https://icalendar.org/validator.html, http://ical-validator.herokuapp.com/ – tcmb

1

Esta es mi respuesta para DESCRIPTION

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

Según this RFC:

líneas de contenido están delimitados por un salto de línea, que es un CRLF secuencia (carácter CR seguido de carácter LF).

Debes usar \r\n. Utilicé esto en cadenas sin escape adicional de barra invertida.

Cuestiones relacionadas