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;
}