PHP,IMAP和Outlook 2010 - 文件夹名称编码是不同的?

时间:2012-05-04 08:58:56

标签: php symfony imap utf-7

我在php(使用symfony2)开发电子邮件客户端,我的名字中包含非ascii字符的文件夹有问题。

在php应用中创建的文件夹在同一个应用中正确显示。在Outlook中相同,在outlook中创建的前景看起来很好。在其他情况下没有。在outlook中创建的文件夹在php中无法正确显示,反之亦然。

我使用utf-7在php中编码文件夹名称。哪种编码使用Outlook?

示例:名为“Wysłąne”的文件夹(拼写错误的波兰语意为“已发送”),第一个用php编码的utf7,第二个用Outlook编写:

PHP:

Wys&xYLEhQ-ne

展望:

Wys&AUIBBQ-ne

为何与众不同?如何使用相同的编码?

1 个答案:

答案 0 :(得分:3)

源字符编码似乎有混淆。 imap_utf7_encode(和类似的)期望你的字符串采用ISO-8859-1编码。

AFAICT无法在ISO-8859-1中代表Wysłąne。表示为UTF-8的“Wysłąne”变为(十六进制字节)

byte value (hex)    57, 79, 73, C5 82, C4 85, 6E 65
unicode character   W   y   s   ł      ą      n  e

解码后的PHP结果Wys& xYLEhQ-ne是“Wys얂쒅ne”。其中的两个特殊字符是韩文字符,代码分别为U + C582和U + C485。因此,似乎尝试了以字符为单位的字符翻译,其中两个字符的UTF-8表示被解释为Unicode代码点。

解决此问题的最简单方法是使用具有mbstring功能的mb_convert_encoding扩展程序。

$utf7encoded = mb_convert_encoding($utf8SourceString, "UTF7-IMAP","UTF-8")
$decodedAsUTF8 = mb_convert_encoding($utf7String,"UTF-8", "UTF7-IMAP")