Ja, das ist verständlich, da fehlte noch das:
$term_inhalt = iconv('UTF-8','ISO-8859-1',$term_inhalt);
oder in Deinem besonderen Sonderzeichen-Fall
das hier:
$term_inhalt = iconv('UTF-8','ISO-8859-1//IGNORE',$term_inhalt);
Danke fürs Testen! 
Das Skript sieht jetzt so aus:
<?
/*=============================================
Skriptvorlage:
export_sunbird - Martin Heinzel - 18.03.2010
Version: 2.1
Beschreibung:
In diesem Skript werden die relevanten Termindaten einer *.ics (Sunbird
Terminverwaltung) in eine *.txt konvertiert.
================================================*/
//Bitte anpassen
//------------------------------------------
//Ablageort für *.txt
$file_txt = IPS_GetKernelDir()."media\\Kalender\
ame_kurz.txt";
//Ablageort für *.ics ("Sunbird")
$file_sunbird = IPS_GetKernelDir()."media\\Kalender\
ame.txt";
//Terminart
$term_art = "NAME";
//------------------------------------------
//--------------------------- Main ----------------------------
// Variablen
//String für kompletten Sunbird Datensatz
$Sunbird_DS_komplett = "";
//String array für Termine
$term_arr_komplett = array();
$dauer_term_arr = array();
//$term_arr_komplett[] = "000000000,00,00,,";
//timestamp,tag,monat,inhalt,art
//Daten holen
if(file_exists($file_sunbird))
//Termine in Variable einlesen
$Sunbird_DS_komplett = file_get_contents($file_sunbird);
//print_r ($Sunbird_DS_komplett);
// war die Kalenderdatei gefüllt?
if(strpos($Sunbird_DS_komplett,'VCALENDAR'))
{
//Den kompletten Datensatz zerlegen
$Sunbird_DS_arr_komplett = explode("BEGIN:", $Sunbird_DS_komplett);
//print_r($Sunbird_DS_arr_komplett);
//alle Datensätze durchlaufen
foreach($Sunbird_DS_arr_komplett as $key_1 => $value_1)
{
$term_inhalt = "";
$term_end = "ENDE";
$term_tag = "";
$term_monat = "";
$term_jahr = "";
$startdatum = "";
//Schalter inaktiv setzen
$rrule = 0;
$zusatz = 0;
//Der erste Datensatz ist "2"
if($key_1 > 1)
{
//einzelnen Datensatz in Daten zerlegen
$Sunbird_arr = explode("
", $value_1);
// $Sunbird_arr = explode("
", $value_1);
//Nur Datensätze vom Typ "VEVENT" durchlaufen
if($Sunbird_arr[0] == "VEVENT")
{
//alle Daten durchlaufen
foreach($Sunbird_arr as $key_2 => $value_2)
{
//Daten zerlegen in Parameter und Wert
$Data_arr = explode(":", $value_2);
//Kontrolle der Parameter
Switch($Data_arr[0])
{
case "SUMMARY":
$term_inhalt = $Data_arr[1];
$term_inhalt = iconv('UTF-8','ISO-8859-1',$term_inhalt);
break;
//Wiederholender Termin
case "RRULE":
// print_r($Data_arr[1]."
");
//Wiederholung zerlegen und in array
// $term_rule_arr = explode(";", $Data_arr[1]);
$rrule = 1;
$timestamp = time();
$diesjahr = date("Y",$timestamp);
$term_jahr_rr = $diesjahr;
break;
//Zeitstempel Datum
case "DTSTART":
case "DTSTART;VALUE=DATE":
$term_jahr = substr($Data_arr[1], 0, 4);
$term_monat = substr($Data_arr[1], 4, 2);
$term_tag = substr($Data_arr[1], 6, 2);
if ($rrule)
{
$term_jahr = $term_jahr_rr;
}
$startdate = $Data_arr[1];
$start_timestamp = mktime(0, 0, 0, (int)$term_monat, (int)$term_tag, (int)$term_jahr);
break;
//Zeitstempel Datum und Zeit
case "DTSTART;TZID=Europe/Berlin":
$term_jahr = substr($Data_arr[1], 0, 4);
$term_monat = substr($Data_arr[1], 4, 2);
$term_tag = substr($Data_arr[1], 6, 2);
if ($rrule)
{
$term_jahr = $term_jahr_rr;
}
break;
case "DTSTART;VALUE=DATE;TZID=Europe/Berlin":
$term_jahr = substr($Data_arr[1], 0, 4);
$term_monat = substr($Data_arr[1], 4, 2);
$term_tag = substr($Data_arr[1], 6, 2);
if ($rrule)
{
$term_jahr = $term_jahr_rr;
}
break;
case "DTEND;VALUE=DATE":
$end_jahr = substr($Data_arr[1], 0, 4);
if ($end_jahr >= date("Y"))
{
$end_monat = substr($Data_arr[1], 4, 2);
$end_tag = substr($Data_arr[1], 6, 2);
$end_timestamp = mktime(0, 0, 0, (int)$end_monat, (int)$end_tag, (int)$end_jahr);
if ($start_timestamp !== $end_timestamp - (24 * 60 *60))
{
$dauer = round(($end_timestamp - $start_timestamp) / 60 / 60 / 24) - 1;
for ($i = 1; $i <= $dauer; $i++)
{
$start_timestamp = $start_timestamp + (24 * 60 *60);
if (!$zusatz)
{
$zusatz_term_tag = $term_tag + 1;
$zusatz = 1;
}
else $zusatz_term_tag = $zusatz_term_tag + 1;
foreach($Sunbird_arr as $key_3)
{
if (strstr($key_3, "SUMMARY") != False )
{
$term_inhalt = substr($key_3, 8);
$term_inhalt = iconv('UTF-8','ISO-8859-1',$term_inhalt);
}
}
$zusatz_term_arr[0] = $start_timestamp;
$zusatz_term_arr[1] = sprintf("%02s", $zusatz_term_tag);
$zusatz_term_arr[2] = sprintf("%02s", $term_monat);
$zusatz_term_arr[3] = $term_inhalt;
$zusatz_term_arr[4] = $term_art;
$zusatz_term_arr[5] = $term_end;
$zusatz_termin = implode(",", $zusatz_term_arr);
$dauer_term_arr[] = $zusatz_termin;
}
}
}
break;
}
}
//Restliche Daten generieren
//Time stamp
$term_timestamp = mktime(0, 0, 0, (int)$term_monat, (int)$term_tag, (int)$term_jahr);
//Termin array zusammenstellen
$term_arr[0] = $term_timestamp;
$term_arr[1] = sprintf("%02s", $term_tag);
$term_arr[2] = sprintf("%02s", $term_monat);
$term_arr[3] = $term_inhalt;
$term_arr[4] = $term_art;
$term_arr[5] = $term_end;
//Termin in einen String
$termin = implode(",", $term_arr);
$term_arr_komplett[] = $termin;
}
}
}
$term_arr_komplett = array_merge($term_arr_komplett,$dauer_term_arr);
sort($term_arr_komplett); // nach Zeit sortieren
$term_neu_komplett = implode("
", $term_arr_komplett); // in String zurück
//print_r($term_neu_komplett);
$handle=fopen($file_txt, "w");
fwrite($handle,$term_neu_komplett);
fclose($handle);
}
//---------------------- Main Ende ----------------------------
?>
Ich tausche es mal in Beitrag #3 unter Nr. 1 aus.
Grüße
galleto