2012-05-04 7 views
1

私はPHPでsymfony2を使って電子メールクライアントを開発していますが、アスキー文字以外の名前のフォルダでは問題があります。PHP、IMAP、Outlook 2010 - フォルダ名のエンコーディングが異なる?

phpアプリケーションで作成されたフォルダは、同じアプリケーションで正しく表示されます。 Outlookで同じように、Outlookで作成されたOutlookで良好に見えます。他の場合ではない。 Outlookで作成されたフォルダは、PHPでは正しく表示されず、逆も同様です。

私はutf-7を使ってPHPでフォルダ名をエンコードしています。どのエンコーディングがOutlookを使用しますか?

例: "Wysłąne" という名前のフォルダ( "送信" を意味スペルミスポーランド語)、最初のものはPHPによってUTF7で符号化し、第二のOutlookで作成された:

PHP:

Wys&xYLEhQ-ne 

見通し:

Wys&AUIBBQ-ne 

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

+0

utf-7をエンコードするために使用するPHPコードを追加できますか? Outlookのエンコーディングは正しいので、PHPコードにエラーがあります。 – beetstra

+0

phpのimap_utf7_(de | en)コード関数によって行われます。 – WombaT

答えて

3

ソースコードのエンコーディングにミックスアップがあるようです。 imap_utf7_encode(と同様のもの)はISO-8859-1エンコーディングであなたの文字列を期待しています。

AFAICT ISO-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コードポイントとして解釈される、文字単位の変換が何らかの形で試みられているように見えます。

これを解決する最も簡単な方法は、mb_convert_encoding機能を持つmbstring拡張子を使用することです。

$utf7encoded = mb_convert_encoding($utf8SourceString, "UTF7-IMAP","UTF-8") 
$decodedAsUTF8 = mb_convert_encoding($utf7String,"UTF-8", "UTF7-IMAP") 
+0

答えをありがとうが、私はまだそれを働かせることができません。あなたの方法でそれを解読しようとしているとき、それは私に与えます: 'Wys&AUIBBQ-ne' =>' Wys&-AUIBBQ-ne' – WombaT

+0

ああ、心配しないで、ちょうどFROMとTOエンコーディングの命令と混同しました; – WombaT

関連する問題