2012-11-15 61 views
0

我正在下拉電子郵件中包含英文,中文和日文的電子郵件。 我正在使用PHP/EZComponents來做到這一點,但某些日本字符只是沒有通過,所以我切換到php imap_ * funcs,看看他們是否會工作。如何從imap_fetchbody解析日文字符(utf8?)?

這是我在下面,我得到的輸出。我需要以某種方式解碼......我知道這一切都很好(閱讀:過度/混亂)記錄在整個網絡上,但我沒有時間在這個時候獲得博士學位。任何幫助是極大的讚賞。

$hn='{imap.gmail.com:993/imap/ssl}INBOX'; 
$inbox = imap_open($hn,$username,$password,CL_EXPUNGE); 

foreach($emails as $email_number) { 
     $ov = imap_fetch_overview($inbox,$email_number,0); 
     $msg = imap_fetchbody($inbox,$email_number,2); 
     var_dump($msg); 

    // doesnt work... .. but right idea? 
    // var_dump(utf8_decode($msg)); 

} 

部分輸出:

<font face=3D"Arial"><span lang=3D"EN-US" style=3D"font-size:10.5pt"><br></= 
span></font><font color=3D"navy" face=3D"MS Gothic"><span lang=3D"JA" style= 
=3D"font-size:10.5pt">=CC=EC=9A=DD=A4=AC=A4=A4=A4=A4=A4=AB=A4=E9=A1=A2</spa= 
n></font></p><p style=3D"margin-right:0pt;margin-bottom:12pt;margin-left:0p= 
t"> 




<font color=3D"navy" face=3D"MS Gothic"><span lang=3D"JA" style=3D"font-siz= 
e:10.5pt"><br></span></font></p><p style=3D"margin-right:0pt;margin-bottom:= 
12pt;margin-left:0pt"><font color=3D"navy" face=3D"MS Gothic"><span lang=3D= 
"JA" style=3D"font-size:10.5pt">xxend</span></font></p> 
+1

不,'utf8_decode'不是你想要的。您需要獲取電子郵件標題,解析它們,計算出消息的傳輸編碼和/或字符集(標題中標有該字符集),然後使用正確的方法將傳輸編碼解碼爲正常文本,並/或將其從任何如果需要,使用'iconv'將非UTF-8編碼轉換爲UTF-8。 – deceze

+0

如果電子郵件全部使用UTF8,則它應該全部編碼正確(如果沒有),那麼該字符將從另一個字符集導入(它將以不同的方式編號),因此它將顯示爲不同的字符在UTF8。如果該字母是2個隨機字母,請嘗試utf8_decode。 – Lucas

+0

我沒有時間詳細研究這個問題,但是這裏有一個粘貼(部分)舊處理腳本,用於處理特定的電子郵件附件:http://pastebin.com/5438Test。它沒有處理你的具體問題,但它在一定程度上處理了內容編碼。你必須充實一點。希望能幫助到你。 – deceze

回答

0

我也遇到了這個問題,採用imap_fetchbody函數來獲得郵件正文。

我發現從imap_fetchbody獲得的字符串自動轉換爲quoted-printable字符串。

我使用imap_qprint函數將取出的字符串正文轉換爲正確的字符串正文解決了此問題。