PHP中生成vCards的字符编码问题

时间:2013-03-27 23:45:40

标签: php character-encoding vcard

我们遇到了尝试在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");

2 个答案:

答案 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上测试。