blog.bartlweb - a technologist's external brain

Outlook und Apple Kontakte bzw. Kalender kompatible vCard/vCal/iCal-Dateien

Gerade wenn Kontakte im vCard-Format bzw. Termine im vCal/iCal-Format automatisch generiert werden sollen und auf allen Systemen einwandfrei dargestellt werden müssen ist einiges an Testaufwand notwendig. Die folgenden Templates sind unter den Apple MacOSX Standard PIM-Programmen und Microsoft Outlook getestet.

Wichtig ist die Auslieferung der vCard-Datei in der Zeichenkodierung ISO-8859-1 und die Auslieferung der vCal/iCal-Datei in UTF-8.

vCard

Mime-Type

text/x-vCard

Codierung

ISO-8859-1

Code

Es können jederzeit nicht vorhandene/benötigte Angaben weggelassen werden. Dabei ist zu beachten, dass wenn möglich die ganze Zeile entfernt wird. Sind Teile des Namens bzw. der Adresse nicht vorhanden, so bleiben die Felder leer, die Position der anderen Felder und die der Beistriche muss aber unverändert bleiben.

BEGIN:VCARD
VERSION:2.1
 
N;CHARSET=ISO-8859-1;LANGUAGE=de-at:<Nachname>;<Vorname>;<zusätzliche Vornamen>;<Anrede/Titel>;<nachgestellter Titel>
FN;CHARSET=ISO-8859-1:<vollständiger Name - [Anrede/Titel] [Vorname] [zusätzliche Vornamen] [Nachname], [nachgestellter Titel]>
ORG;CHARSET=ISO-8859-1:<Organisation>,<Abteilung>
TEL;WORK;VOICE;CHARSET=ISO-8859-1:<Telefonnummer>
TEL;WORK;FAX;CHARSET=ISO-8859-1:<Faxnummer>
TEL;WORK;CELL;CHARSET=ISO-8859-1:<Mobilnummer>
ADR;WORK;PREF;CHARSET=ISO-8859-1:;;<Straße+Hausnummer>;<Stadt/Ort>;<Bundesland>;<Postleitzahl>;<Land>
URL;WORK;CHARSET=ISO-8859-1:<Website>
EMAIL;PREF;INTERNET;CHARSET=ISO-8859-1:<E-Mail-Adresse>
NOTE;CHARSET=ISO-8859-1:<Notizen>
 
END:VCARD

vCal

Mime-Type

text/x-vCalender

Codierung

UTF-8

Code

BEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
 
DTSTART:<Start-Datum/Zeit>
DTEND:<End-Datum/Zeit>
SUMMARY;ENCODING=QUOTED-PRINTABLE:<Eventname (quoted printable)>
SUMMARY:<Eventname>
LOCATION;ENCODING=QUOTED-PRINTABLE:<Ort (quoted printable)>
LOCATION:<Ort>
DESCRIPTION;ENCODING=QUOTED-PRINTABLE:=
<Notizen (quoted printable)>
DESCRIPTION:<Notizen>
URL;VALUE=URI:<URL>
 
END:VEVENT
END:VCALENDAR

iCal

Mime-Type

text/calendar

Codierung

UTF-8

Code für Termine mit Start- und Endzeit

BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
 
DTSTART:<Start-Datum/Zeit>
DTEND:<End-Datum/Zeit>
SUMMARY;LANGUAGE=de-at:<Eventname>
LOCATION:<Ort>
DESCRIPTION:<Notizen>
URL;VALUE=URI:<URL>
 
END:VEVENT
END:VCALENDAR

Codeänderung bei ganztägigen Ereignissen

DTSTART;VALUE=DATE:<Start-Datum>
DTEND;VALUE=DATE:<End-Datum>

Hinweise zur Umsetzung

Generieren von Zeit/Datum-Angaben für iCal/vCal-Dateien

Ereignisse mit Start- und Endzeit

Beispiele
02.04.2011 18:30 - 19:30
12.07.2011 08:30 - 13.07.2011 14:00
vCal
Start: <Jahr><Monat><Tag>T<Stunde-1><Minute>00Z
Ende: <Jahr><Monat><Tag>T<Stunde-1><Minute>00Z
Start: 20110401T173000
Ende: 20110402T183000
 
Start: 20110712T073000
Ende: 20110713T130000
iCal
Start: <Jahr><Monat><Tag>T<Stunde><Minute>00
Ende: <Jahr><Monat><Tag>T<Stunde><Minute>00
Start: 20110401T183000
Ende: 20110402T193000
 
Start: 20110712T083000
Ende: 20110713T140000

ganztägige Ereignisse

Beispiele
02.04.2011
12.10.2011 - 24.10.2011
vCal
Start: <Jahr><Monat><Tag-1>T230000Z
Ende: <Jahr><Monat><Tag>T230000Z
Start: 20110401T230000Z
Ende: 20110402T230000Z
 
Start: 20111011T230000Z
Ende: 20111024T230000Z
iCal
Start: <Jahr><Monat><Tag>
Ende: <Jahr><Monat><Tag+1>
Start: 20110402
Ende: 20110403
 
Start: 20111012
Ende: 20111025

Ausgabe über eine TYPO3-Extension

Typoscript

Um die generierten Textdatein mittels TYPO3 auszugeben, muss zunächst die komplette Ausgabe gelöscht werden. Der folgende Typoscript-Code erzeugt eine leere Seite und gibt nur die Ausgabe einer Extension aus. Es empfiehlt sich der Einsatz von Conditional Comments um die Ausgabe z.B. nur bei der Übergabe eines bestimmten Parameters zu löschen.

config {
    disablePrefixComment = 1
    no_cache = 1
}
 
page = PAGE
page.typeNum = 0
page.config >
page.config {
    metaCharset = utf-8
    xhtml_cleaning = all
    disableAllHeaderCode = 1
}
 
page.config.additionalHeaders = Content-Type: text/x-vCard; charset=ISO-8859-1
#page.config.additionalHeaders = Content-Type: text/calender; charset=utf-8
#page.config.additionalHeaders = Content-Type: text/x-vCalender; charset=utf-8
 
page.10 < plugin.tx_extension_pi1

Ausgabe in der Extension

Die folgende Zeile PHP-Code forciert den Download der generierten Datei.

header("Content-Disposition: attachment; filename=" . utf8_decode($filename) . '.vcf');

Da vCards nicht als UTF-8 sondern als ISO-8859-1 codiert sein müssen, muss die Ausgabe dementsprechend umcodiert werden.

$content = trim(utf8_decode($content));

Vor der Ausgabe sollten noch alle Subpart-Marker (HTML-Kommentare) aus dem Template entfernet werden.

$content = preg_replace('/\<!\s*--[^-]*--\s*\>/','', $content);

Quoted-Printable

PHP bietet erst ab Version 5.3 eine Funktion zum codieren eines Strings als quoted printable an. Die folgende Funktion ermittelt ob diese Funktion vorhanden ist und bietet für niedrigere PHP-Version eine Ersatzfunktion für das codieren von deutschen Umlauten an.

function quotedPrintable($string) {
    if(function_exists(‘quoted_printable_encode’)) {
        // use native php function (php => 5.3)           
        $string = quoted_printable_encode($string);
    } else {
        //simulate quoted printable
        $searchArray = array (
            'ö', 'Ö',
            'ä', 'Ä',
            'ü', 'Ü',
            'ß'
        );
 
        $replaceArray = array (
            '=F6', '=D6',
            '=E4', '=C4',
            '=FC', '=DC',
            '=DF'
        );
 
        $string = str_replace($searchArray, $replaceArray, $string);
 
        $searchArray = array("\r\n", "\n\r", "\r", "\n");
        $string = str_replace($searchArray, '=0D=0A', $string);
    }
 
    return $string;
}

Dieser Artikel hat Dir deinen Tag gerettet?

... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? Oder einfach nur Dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Anerkennung honorierst:

Zahlung mit PayPal oder Kreditkarte.

Hinweis zur Verwendung

Die Übermittlung einer Zahlung ist eine persönliche Anerkennung Ihrerseits an den Entwickler (Christian Bartl, Privatperson). Eine Zahlung ist nicht zweckgebunden und es ist keine Gegenleistung zu erwarten. Bitte beachten Sie, dass für eine übermittelte Zahlung keine Quittung ausgestellt werden kann.

Über den Autor

Christian Bartl

Christian Bartl Requirements Engineer
& Solution Architect für Online und Mobile

Als Technologie-Enthusiast und begeisterter Programmierer entwickle ich in meiner Freizeit Websites, Software und IT-Lösungen, die mir selbst und anderen den Alltag vereinfachen.

mehr auf christian.bartl.me

Kommentare

Noch kein Kommentar vorhanden.
Sei der Erste! - Ich freue mich über deine Anmerkung, Kritik oder Frage.

Kommentar schreiben

Der hier angegebene Name wird gemeinsam mit deinem Kommentar auf der Website veröffentlicht.

Deine E-Mail-Adresse wird zur einmaligen Benachrichtigung bei Veröffentlichung des Kommentars genutzt.

Benachrichtigung per E-Mail über Antworten auf meinen Kommentar erhalten.

Bitte tippe die Zahlenkombination "3667" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.