[英]Odd encoding issue after UTF-8 straightens “most” things out
好的,所以我們有一個腳本,可以將電子郵件發送到thunderbird,將部分消息轉換為html並將其保存到MySQL。 每個文件,每個寫入的部分都設置為UTF-8。 最后,在我的工作結束時,CRM(用PHP5.3編寫的預期輸出Chrome和Firefox),我拉出消息,連同其他信息並顯示類似於GMail的內容,但作為我們員工的“任務列表”。
我遇到的問題,如果你還沒有猜到,一些客戶的電子郵件顯然是使用不同的編碼。 因此,一些(不是全部,當然不是大多數)電子郵件不能正確顯示所有字符。
起初我使用utf8_encode
來使電子郵件看起來正確,這有助於大多數來自數據庫的電子郵件消息,但是,有些電子郵件會出現錯誤的字符。
在DB這些“壞撇號”出現’
,但經過utf8_encode
他們來通過的 ??
。 我已經嘗試過各種編碼方法來根據需要進行猜測和更改,但是,這往往會傷害絕大多數其他電子郵件。
管道或另一端的任何建議,我如何獲得這些電子郵件以匹配其他所有內容,或者我如何至少在最后創建一個可能的preg_replace
過濾器或什么?
根據mb_detect_encoding
即使是帶有錯誤字符的電子郵件也會以utf-8
形式傳遞給php。 這是在任何額外編碼之前。 iconv
確實檢測到那些問題,但這真的讓我無法解決它們,只是在屏幕上放了一個php錯誤框而不是它說它應該給的簡單的FALSE
返回,所以這似乎也是沒有解決方案。
問題是您不知道郵件的編碼。 utf8_encode
僅從ISO-8859-1編碼為UTF-8。 因此,您可以嘗試使用mb_detect_encoding獲取編碼,然后使用iconv轉換為UTF-8。
編輯:您也可以嘗試閱讀Content-Type
的郵件字符集。
首先,我要感謝SebastiánGrignoli創建這個非常方便的課程 ( 原始 )。 我最終將其用於最終解決方案。
其次,我將課程添加到Codeigniter 。 對於任何使用CI的人來說,這是一個簡單的實現。 只需在名為Encoding.php
application/libraries
創建一個文件(是的,使用大寫e
)。 然后將代碼復制到該文件,但在第40行注釋掉(或刪除) namespace ForceUTF8
。
我的最終結果如下:
echo(Encoding::fixUTF8(utf8_decode($msgHTML)));
我還在仔細檢查,但到目前為止,我還沒有發現一個錯誤!
如果我在此之后發現另一個編碼問題,我會確保更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.