PHP VCard export, Problem mit Sonerzeichen

martinibook

martinibook

Aktives Mitglied
Thread Starter
Dabei seit
20.08.2005
Beiträge
8.730
Reaktionspunkte
350
Hi,

Ich habe für meine Online-Adressdatenbank einen VCard Export mit PHP gebastelt. Das Problem ist nun, dass die Umlaute alle falsch dargestellt werden.

In der PHP Datei habe folgendes:
PHP:
header("Content-Type: text/x-vcard; charset=iso-8859-1");
Allerdings hilft das überhaupt nicht, auch wenn ich UTF-8 benutze. Die Webseiten sind alle in ISO-8859-1 gehalten, das sollte doch klappen, oder?

Was mache ich falsch?
 
Womit siehst Du Dir denn die exportierten VCards an? Wäre ja möglich, dass das Problem hier liegt und gar nicht mal beim Export an sich…
 
Ich habe die VCard mal in skEdit unter UTF-8 geöffnet, dann werden alle ö zu ^. Im Adressbuch von Apple passiert das gleiche.

Unter Windows Vista klappt das ganze aber Problemlos in Outlook, da sind die Umlaute okay.

Heißt das, dass das Adressbuch UTF-8 benutzt, mein Skript hat aber alles in ISO-8859-1. Wie löse ich das problem?
 
Auf UTF-8 umstellen? ;)

Ne, das war noch ne Ecke komplizierter. Ist schon ne Weile her bei mir mit vcards. Wenn ich mich recht erinnere kommen sämtliche Microsoft-Produkte mit UTF-8 als Encoding garnicht klar, sondern stellen nur ASCII-Zeichen richtig dar. Frag mich wie die das in Japan mache. ;)
Gut, ich hau dir mal eben bisserl Code um die Ohren. Stammt aus einem alten Projekt:
Code:
<?

$GLOBAL_OFFICES=array(
   "Berlin" => array(
      "plz" => "00000",
      "strasse" => "zensiert",
      "stadt" =>"Berlin"
   ),
   "Frankfurt" => array(
      "plz" => "00000",
      "strasse" => "zensiert",
      "stadt" =>"Frankfurt am Main"
   ),
   "Munich" => array(
      "plz" => "00000",
      "strasse" => "zensiert",
      "stadt" =>"Munich"
   )
);


$filename=$GLOBALS['we_doc']->getElement('Vorname').'_'.utf8_decode($GLOBALS['we_doc']->getElement('Name')).'.vcf';
$replace_von=array('/ /','/ä/','/Ä/','/ü/','/Ü/','/ö/','/Ö/','/ß/');
$replace_zu=array('_','ae','Ae','ue','Ue','oe','Oe','ss');
$filename=strtolower(preg_replace($replace_von,$replace_zu,$filename));
header("Content-Type: text/x-vcard; charset=UTF-8");
header('Content-Disposition: attachment; filename="'.$filename.'"');
?>BEGIN:VCARD
VERSION:2.1
N;CHARSET=WINDOWS-1252:<?=utf8_decode($GLOBALS['we_doc']->getElement('Name'))?>;<?=utf8_decode($GLOBALS['we_doc']->getElement('Vorname'))?>;;<?=utf8_decode($GLOBALS['we_doc']->getElement('Title1'))?>

FN;CHARSET=WINDOWS-1252:<?
$titel=utf8_decode($GLOBALS['we_doc']->getElement('Title1'));
if(!empty($titel))
   echo $titel.' ';
?><?=utf8_decode($GLOBALS['we_doc']->getElement('Vorname'))?> <?=utf8_decode($GLOBALS['we_doc']->getElement('Name'))?>

ORG;CHARSET=WINDOWS-1252:sensiert
TITLE:<?=utf8_decode($GLOBALS['we_doc']->getElement('Status'))?>

URL;WORK:http://www.zensiert.com/
EMAIL;TYPE=INTERNET:<?=utf8_decode($GLOBALS['we_doc']->getElement('Email'))?>

ADR;WORK;CHARSET=WINDOWS-1252:;;<?
$stadt=$GLOBALS['we_doc']->getElement('Offices');
if(stristr($stadt,',')) {
   $stadt=substr($stadt,0,strpos($stadt,','));
}
echo ($GLOBAL_OFFICES[$stadt]['strasse']);
?>;<?=($GLOBAL_OFFICES[$stadt]['stadt']);
?>;;<?=($GLOBAL_OFFICES[$stadt]['plz'])?>;Germany
TEL;WORK;VOICE:<?=utf8_decode($GLOBALS['we_doc']->getElement('Assistant1_Phone'))?>

TEL;WORK;FAX:<?=utf8_decode($GLOBALS['we_doc']->getElement('Fax'))?>

ADR;WORK:;<?=utf8_decode($GLOBALS['we_doc']->getElement('Offices'))?>

LABEL;WORK:<?=utf8_decode($GLOBALS['we_doc']->getElement('Offices'))?>

END:VCARD
Die einzelnen Abschnitte sind nochmal mit einem anderen Zeichensatz kodiert. Frag mich nicht warum WINDOWS-1252. Wird wohl der mit dem besten Ergebnis gewesen sein. Ich hab damals auch ewig und 3 Tage rumgefrickelt und gegoogelt. Bei mir lagen die Daten als UTF-8 vor, das utf8_decode() brauchst Du natürlich nicht.

Hoffe das hilft Dir.
 
Ich habe jetzt an jeder Zeile einfach ISO-8859-1 hinzugefügt, auf einmal klappt es am Mac und unter Vista, vielen Dank!
 
Zurück
Oben Unten