IMAP编码和解码:UTF-8问题

时间:2013-04-04 09:18:56

标签: php encoding utf-8 imap

我有一个函数,用于在Gmail帐户上将邮件从一个文件夹移动到另一个文件夹。 在移动邮件时,该功能完全正常。我的问题出现了 使用utf-8编码的邮箱。我解码IMAP文件夹列表响应 但两个值的转储会产生不同的结果。

// Getting the folders
$folders = imap_list(CONNECTION, MAILBOX, PATTERN);

// After a foreach, stripping slash, prefix and such
// $folder is the raw mailbox name from the IMAP list
$mailbox = utf8_encode(imap_utf7_decode($folder)); // = string(12) "Tæstbåks"

// The entered search from the client
$search_for = "Tæstbåks"; // = string(10) "Tæstbåks"

if($search_for == $mailbox)
    print "Yeah!";
else
    print "Noo!";

我不知道为什么这两个字符串不匹配,这就是我的问题。

1 个答案:

答案 0 :(得分:5)

PHP的函数imap_utf7_decode($folder)documented以返回ISO-8859-1编码的字符串。鉴于IMAP修改后的UTF-7方案可以编码整个Unicode范围(这意味着“很多”)并且ISO-8859-1只能代表256个单独的字符,所以在这种情况下你不可能使用该功能。我甚至建议那些决定提供这种无用功能的PHP开发人员在他设计它的那天并没有达到最佳状态。

看起来mbstring扩展可以做你真正想做的事情 - 使用$mailbox = mb_convert_encoding($folder, "UTF-8", "UTF7-IMAP")之类的东西,如PHP文档下面的评论所示。