PHP生成的Vcard:更改字符编码,以便显示重音字符

时间:2011-08-30 08:27:43

标签: php encoding diacritics vcard

我正在使用PHP类生成vcard:http://www.troywolf.com/articles/php/class_vcard/

但重音角色没有正确显示。我想这与字符编码有关,但我一直无法找到改变它的方法。

我的所有文件都保存为UTF8而没有BOM,以下是脚本的输出结果:

BEGIN:VCARD
VERSION:3.0
CLASS:PUBLIC
PRODID:-//www.bla.com//Version 1//EN
REV:2011-08-30 03:19:49
FN:Heïdi DABODFE
N:DABODFE;Heïdi;;;
TITLE:Directrice
ORG:blablabla
ADR;TYPE=work:;;2 Imp. Les Plataness;Mirepoix;;09500;France
EMAIL;TYPE=internet,pref:contact@bla.com
TEL;TYPE=work,voice:05 61 68 64 38
PHOTO;ENCODING=BASE64;TYPE=JPEG:
/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkc
gSlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCA
wKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LD
RQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgA
YABgAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwM
CBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJS
YnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVl
peYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX2
9/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAE
CdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Nj
c4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjp
KWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwD
AQACEQMRAD8A89utR1C31YaXp901ncyyD7VcxP5bz3DcvuYY+UMSAOnGepNaHiTTr2y0q2bxAks
WpNdNEWfia4t1AJZ+hYBsbWPXJ64GMfULGTU4hqkKF94BuEAyUbABb/dJGc9icUv2SC8uYAJDDG
5C+ZMT0A5PfvkVwH7nGmtH95YuUvJIVu7m4nFvJMIwsuQzIRk7W/iA6cccj1qSy8MyeIL42mlRP
KyJvVCpOTjJAIyB+JxnvXqXwj/Zw1Dx/dvfXr/2b4fhO57iQ4BXr1OOP5+2c19hfD74YaZ4as47
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
8K3PbnJv0P/Z

URL;TYPE=work:www.bla.com
NOTE:bla
TZ:-0500
END:VCARD

非常感谢任何帮助

3 个答案:

答案 0 :(得分:1)

您是否尝试过导入此VCARD的其他程序?对于版本3.0,除非其名称以“O”开头并以“tlook”结尾^^

,否则它们应该与utf-8一致。

看看这是否适合你:

FN;CHARSET=utf-8:Heïdi DABODFE
N;CHARSET=utf-8:DABODFE;Heïdi;;;

答案 1 :(得分:0)

解决方案就是这样,

假设$ vcf是包含utf-8字符的字符串:

file_put_contents($dir.$filename, utf8_decode($vcf));

法语utf-8字符在Outlook中正确显示,刚刚找到。

答案 2 :(得分:0)

如果程序真的符合标准,那将是一件好事!这是他们应该如何工作:

  • 对于vCard 2.1,您应该使用FN;CHARSET=utf-8;ENCODING=8BIT:Heïdi DABODFE,因为它也可以是ENCODING=QUOTED-PRINTABLE,许多程序确实使用它。我认为Outlook很好吃,但是Thunderbird拒绝了ENCODING部分(Thunderbird也会输出所谓的v2.1 vCards而没有字符集/编码信息)。
  • 对于vCard 3.0,每个属性使用不同字符集的可能性消失了(它有什么意义?)。在传输vCard时,您将使用Content-type MIME标头,并且指定字符集的位置(RFC的第5部分)。但是,您通常不会在vCard文件中找到Content-type标头,并且大多数程序只使用FN;CHARSET=utf-8;ENCODING=8BIT:Heïdi DABODFE和2.1版本。
  • 对于vCard 4.0,vCard文件的字符集始终为UTF-8,并且无法覆盖此字符,并且在MIME标头中指定不同的字符集无效(RFC的第3.1节)。

现实情况是,大多数程序都非常小心地处理vCard,并使用相同的代码来处理版本2.1,3.0和4. *。我使用UTF-8生成vCard以满足RFC 6350,使用CHARSET=utf-8来满足vCard 2.1规范,避免ENCODING=8BIT满足Thunderbird,我正在考虑添加MIME头。

令人遗憾的是,在2015年处理这个问题仍然很困难,这听起来更像是20世纪80年代的一个问题。