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!";

これらの 2 つの文字列が一致しない理由はわかりません。それが私の問題です。

4

1 に答える 1

5

PHP の関数imap_utf7_decode($folder)は、ISO-8859-1 エンコーディングで文字列を返すように文書化されています。IMAP の変更された UTF-7 スキームが Unicode の全範囲 (「たくさん」を意味する) をエンコードできること、および ISO-8859-1 が 256 個の個々の文字しか表現できないことを考えると、このコンテキストでその関数を使用することはおそらくできません。このような役に立たない関数を提供することを決めた PHP 開発者は、それを設計した日、最高の状態ではなかったとまで言えます。

mbstring 拡張機能は、ここで本当にやりたいことを実行できるようです。PHP$mailbox = mb_convert_encoding($folder, "UTF-8", "UTF7-IMAP")のドキュメントの下のコメントで提案されているように、 のようなものを使用してください。

于 2013-04-08T09:14:54.517 に答える