Мы сталкиваемся с проблемами кодирования символов, которые пытаются создать vcards в PHP.
В именах Outlook, которые используют специальные символы, искажаются, например, «é» становится «Ã ©».
Мы обновили заголовок и разделы FN и N для кодировки символов Windows, но проблема остается.
Благодарен за любые предложения.
Выдержка Vcard:
BEGIN:VCARD VERSION:3.0 REV:2013-03-27 19:37:46 FN;CHARSET=Windows-1252:Namé S. Nameé N;CHARSET=Windows-1252:Namé;Namé;;; TITLE:Associate ORG:Company EMAIL;TYPE=internet,pref:name@abc.com TZ:-0400 END:VCARD
Заголовок PHP для Vcard:
header("Content-type: text/x-vcard; charset=windows-1252;"); header("Content-Length: ".strlen($vc->card)); header("Content-Disposition: attachment; filename=".$vcard_name.".vcf"); header("Pragma: public");
Были и некоторые подобные вопросы, но ничто не казалось окончательным. Указав charset в полях vcard, похоже, что я был на полпути.
Я, наконец, получил его работу, изменив следующее на «utf-8;»:
header("Content-type: text/x-vcard; charset=CHARSET=utf-8;");
То же самое относится к полям имен в самом vcard. Задание utf-8, похоже, разрешило проблемы отображения специальных символов:
$this->card .= "FN;CHARSET=utf-8:".$new_display_name.$this->data['short_mode']; $this->card .= "N;CHARSET=utf-8:"
Открыт в Outlook 2007 со всеми символами акцента, отображаемыми по назначению.
Ваше решение не сработало для меня, у меня все еще есть забавные персонажи в Windows.
Что для меня работало, вместо этого использовалось ISO-8859-1. Вы можете преобразовать UTF8 в ISO-8859-1 в PHP с использованием utf8-decode () , а используя ENCODING=iso-8859-1
в Vcard для соответствующих полей, он работает на большинстве клиентов на основе UTF-8, которые я тестировал на ,
Заголовок:
Content-Type: text/x-vcard; charset=iso-8859-1
Пример Vcard:
N;CHARSET=iso-8859-1:Göteborg
Проверено на Windows, OS X, IOS и Android.