我们遇到了尝试在PHP中创建vcards的字符编码问题。
在使用特殊字符的Outlook名称中,“é”变为“é”。
我们更新了用于Windows字符编码的标题以及FN和N部分,但问题仍然存在。
感谢任何建议。
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
Vcard的PHP标头:
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");
答案 0 :(得分:3)
有一些类似的问题,但似乎没有什么是明确的。通过在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中打开,所有重音字符都按预期显示。
答案 1 :(得分:3)
你的解决方案对我不起作用,我在Windows上仍然有搞笑的角色。
对我有用的是使用ISO-8859-1。您可以使用utf8-decode()在PHP中将UTF8转换为ISO-8859-1,并在Vcard中使用ENCODING=iso-8859-1
相关字段使其适用于我测试过的大多数基于UTF-8的客户端。 / p>
标题:
Content-Type: text/x-vcard; charset=iso-8859-1
Vcard示例:
N;CHARSET=iso-8859-1:Göteborg
在Windows,OS X,IOS和Android上测试。