Estoy tratando de averiguar cómo codificar el carácter de nueva línea en la DESCRIPCIÓN de la parte de un archivo iCal de tal forma que se importe correctamente en Outlook, Google Calendar y el Calendario de Apple.

El código original que he heredado usa «=0D=0A» con un entrecomillado imprimible de codificación, que funciona muy bien en Outlook, pero no en el Calendario de Google.

La especificación parece decir que usted debe utilizar «\n» para representar un salto de línea. Esto funciona muy bien en el Calendario de Google, pero Outlook sólo pone el literal «\n» caracteres de allí.

Hay una manera que usted ha hecho esto, que funcionan de manera uniforme en toda el calendario de sistemas?

7 Comentarios

  1. 39

    OK, mira como estoy respondiendo a mi propia pregunta.

    La forma correcta de hacerlo es utilizar «\n» para los saltos de línea. Outlook no reconoce porque tenía «ENCODING=quoted-printable» en la descripción. Una vez que me quita que, Outlook muestra las nuevas líneas correctamente.

    Además, para obtener el archivo para abrir correctamente en iCal de Apple, usted necesita para usar «VERSIÓN:2.0» para la versión del archivo. Si utiliza la opción «VERSIÓN:1.0», se le dirá que no puede leer el archivo (aunque se ajusta a la especificación 1.0).

    NOTA: Como otros han mencionado, el archivo debe contener la cadena literal \n. Dado que la mayoría de los lenguajes de tratar como una secuencia de escape significado un carácter de nueva línea, usted probablemente tendrá que usar la cadena \\n en el código.

    • para quien agregó \n para crear la nueva línea y todavía no trabajo, terminé usando \\n, como se nota por @periklis
  2. 30

    El comentario con el enlace a la solicitud de cambio de Mateo Cubo por encima en el post original me ayudó. Citando a partir de ahí:

    Un carácter de barra diagonal inversa en un «TEXTO» valor de la propiedad DEBE
    se escapó con otro carácter de barra diagonal inversa

    Así que, hice un

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

    y funcionó

    • Cotización y el código no parecen coincidir. Código sustituye a Windows saltos de línea con el literal \n secuencias.
    • Esto es muy raro ver \\n y casi imposible de comprender correctamente. En .NETA de la tierra que he creado const string textLineFeed = @"\" + "n";
    • Su solución fue la fórmula mágica para mí. He intentado todos los otros en esta página, sin éxito. Gracias.
  3. 21

    Podría ser vale la pena decir que es necesario el literal \n, no el símbolo de nueva línea, literalmente barra invertida y n en la ical. También no se olvide de hacer el 75 personaje de «plegado» demasiado.

  4. 6

    El archivo de salida debe ser como el de abajo—

    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í usted tiene que tener cuidado de Versión, debe ser 2.0 y Escapar de char … \n(nueva línea), punto y coma(;) y la coma(,). Si usted está escribiendo en .neto a continuación, se debe como … «\\n», «\\»; y «\\,».

    Usted puede revisar su archivo de salida en este sitio así… http://icalvalid.cloudapp.net/

    Gracias,
    Bhaskar

  5. 2

    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)));
    
  6. 1

    Según este RFC:

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

    Por lo que debe utilizar \r\n. He utilizado este en cadenas sin necesidad de escape de barra diagonal inversa.

  7. 0

    Tuve que escapar de la salida de la cadena para establecer un literal «\n» en el archivo de salida. Como así. Trabajó un encanto.

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

Dejar respuesta

Please enter your comment!
Please enter your name here