2

我有一个功能,旨在将邮件从一个文件夹移动到 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!";

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

4

1 回答 1

5

PHP 的函数imap_utf7_decode($folder)记录为以 ISO-8859-1 编码返回一个字符串。鉴于 IMAP 修改后的 UTF-7 方案可以编码整个 Unicode 范围(这意味着“很多”)并且 ISO-8859-1 只能表示 256 个单独的字符,因此您不可能在这种情况下使用该功能。我什至会建议,决定提供这种无用功能的 PHP 开发人员在设计它时并没有处于最佳状态。

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

于 2013-04-08T09:14:54.517 回答