2012-02-24 9 views
2

私は文字列"test+=EC=B9=E8=F8=BE=FD=E1=ED=E9+test"を持っています。imap_fetchbody()を使用して取得したメール本文です。適切なUTF-8文字列"test+ěščřžýáíé+test"に変換します。 私は機能を試しましたimap_utf7_decodeimap_8bitbase64_decodequoted_printable_decode成功しません。上記の文字列をUTF-8に変換する関数を私にアドバイスできますか?メール本文をUTF-8に変換

メールヘッダーにはiconv_mime_decode($str, 0, "UTF-8");を使用していますが、メール本文には使用できません。

答えは受け入れ答えのコメントであるあなたに

をありがとうございました!

+0

元の文字列の文字エンコーディングとは何ですか? – hakre

答えて

3

あなたの入力文字列はISO-8859-2と思われるので、私はPHP documentationのコメントから修正したこの機能を使用できます。

function decode_qprint($str) { 
    $str = preg_replace("/\=([A-F][A-F0-9])/", "%$1", $str); 
    $str = urldecode($str); 
    $str = iconv("ISO-8859-2", "UTF-8", $str); 
    return $str; 
} 

編集:コメントあたり更新機能:

function decode_qprint($str) { 
    $str = quoted_printable_decode($str); 
    $str = iconv('ISO-8859-2', 'UTF-8', $str); 
    return $str; 
} 
+0

ありがとうございます。しかし、これは '+'を取り除きます。そして、 'urldecode()'はメールテキストを扱う方法のようには見えません。 (しかし、私はこのエンコーディングの問題に費やした後、私は何にも驚いていません) – A123321

+2

@ Andrew123321ああ、すごく残念です。その場合はさらに簡単です: '$ str = quoted_printable_decode($ str); $ str = iconv( 'ISO-8859-2'、 'UTF-8'、$ str); ' – spencercw

+0

spencercw:わかりました。ありがとうございました。 – A123321

関連する問題