1

PHP(symfony2を使用)で電子メールクライアントを開発していますが、名前にASCII以外の文字が含まれるフォルダーに問題があります。

phpアプリで作成されたフォルダーは、同じアプリで正しく表示されます。Outlookでも同じですが、Outlookで作成したものはOutlookで見栄えがします。それ以外の場合はそうではありません。Outlookで作成されたフォルダは、phpでは正しく表示されません。その逆も同様です。

utf-7を使用してphpでフォルダー名をエンコードしています。Outlookを使用するエンコーディングはどれですか?

例:「Wysłąne」(「送信済み」を意味するスペルミスのポーランド語)という名前のフォルダー。最初のフォルダーはphpによってutf7でエンコードされ、2番目のフォルダーはOutlookで作成されます。

PHP:

Wys&xYLEhQ-ne

見通し:

Wys&AUIBBQ-ne

なぜ違うのですか?同じエンコーディングでそれを作る方法は?

4

1 に答える 1

3

ソース文字エンコーディングに取り違えがあるようです。imap_utf7_encode(および同様のもの)は、ISO-8859-1エンコーディングの文字列を想定しています。

AFAICTISO-8859-1でWysłąneを表す方法はありません。UTF-8として表される「Wysłąne」は(16進バイト)になります

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」です。その中の2つの特殊文字は、それぞれコードポイントU+C582およびU+C485を持つ韓国語の文字です。したがって、文字ごとの変換が何らかの形で試みられているように見えます。この場合、2つの文字の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 に答える