5

我们在尝试在 PHP 中创建电子名片时遇到了字符编码问题。

在 Outlook 中,使用特殊字符的名称会失真,例如“é”变成“é”。

我们更新了 Windows 字符编码的标题以及 FN 和 N 部分,但问题仍然存在。

感谢任何建议。

电子名片摘录:

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");
4

2 回答 2

4

你的解决方案对我不起作用,我在 Windows 上仍然有有趣的字符。

对我有用的是使用 ISO-8859-1。您可以使用utf8-decode()在 PHP 中将 UTF8 转换为 ISO-8859-1 ,并通过ENCODING=iso-8859-1在 Vcard 中使用相关字段使其适用于我测试过的大多数基于 UTF-8 的客户端。

标题:

Content-Type: text/x-vcard; charset=iso-8859-1

电子名片示例:

N;CHARSET=iso-8859-1:Göteborg

在 Windows、OS X、IOS 和 Android 上测试。

于 2014-02-02T22:17:28.843 回答
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 中打开,所有重音字符都按预期显示。

于 2013-03-28T05:40:18.700 回答