我在php(使用symfony2)开发电子邮件客户端,我的名字中包含非ascii字符的文件夹有问题。
在php应用中创建的文件夹在同一个应用中正确显示。在Outlook中相同,在outlook中创建的前景看起来很好。在其他情况下没有。在outlook中创建的文件夹在php中无法正确显示,反之亦然。
我使用utf-7在php中编码文件夹名称。哪种编码使用Outlook?
示例:名为“Wysłąne”的文件夹(拼写错误的波兰语意为“已发送”),第一个用php编码的utf7,第二个用Outlook编写:
PHP:
Wys&xYLEhQ-ne
展望:
Wys&AUIBBQ-ne
为何与众不同?如何使用相同的编码?
答案 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")