2015-10-17 55 views
0

這是一個我一直在爭論很久的問題。我真的希望有人能幫助我。PHP IMAP電子郵件內容和MySQL編碼

我有一個PHP程序從IMAP郵箱讀取電子郵件。在經歷了一段時間的PHP IMAP函數之後,我設法將電子郵件的純文本內容放入一個變量中。

當我在一個日誌文件中對這個變量做var_dump時,我得到了一些很好的和可讀的東西。

但是,當我嘗試將此變量的值保存到我的MySQL數據庫時,它有時取決於原始郵件的編碼而失敗。

我說這是由於編碼,因爲它經常在第一個「特殊字符」失敗。因此,只顯示部分電子郵件。

有沒有什麼辦法可以「清理」在我的MySQL數據庫中使用的變量的值?我的MySQL數據庫的排序規則目前設置爲utf8_unicode_ci

這是我一直使用到現在爲止解碼功能:

static function decode_text($text, $encoding) 
{ 
    //return quoted_printable_decode($text); 
    switch ($encoding) { 
     # 7BIT 
     case 0: 
      return imap_utf7_decode($text); 
     # 8BIT 
     case 1: 
      return imap_utf8($text); 
     # BINARY 
     case 2: 
      return imap_binary($text); 
     # BASE64 
     case 3: 
      return imap_base64($text); 
     # QUOTED-PRINTABLE 
     case 4: 
      return imap_qprint($text); 
     # OTHER 
     case 5: 
      return $text; 
     # UNKNOWN 
     default: 
      return $text; 
    } 
} 

感謝您的幫助!

+0

如果你是存儲在MySQL數據庫中的IMAP電子郵件,你不必。 – e4c5

+0

正確完成,PHP + MySQL從不需要像你的函數那樣解碼。所以我會假設Imap是問題。請提供編碼和解碼所需的 - 無論是在十六進制 - 樣品。 –

回答

-1

我寫了這個github repository來處理這個問題。

使用IMAP從郵箱中讀取電子郵件,然後將返回的電子郵件解析爲設備友好的對象。