1

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

在 php 应用程序中创建的文件夹在同一应用程序中正确可见。在 Outlook 中相同,在 Outlook 中创建的 Outlook 看起来不错。在其他情况下不是。在 Outlook 中创建的文件夹在 php 中无法正确显示,反之亦然。

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

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

PHP:

Wys&xYLEhQ-ne

外表:

Wys&AUIBBQ-ne

为什么不一样?如何以相同的编码制作它?

4

1 回答 1

3

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

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

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")
于 2012-05-05T12:23:12.187 回答