簡體   English   中英

UTF-8之后的奇數編碼問題使“大多數”事情變得緊張

[英]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)));

我還在仔細檢查,但到目前為止,我還沒有發現一個錯誤!

如果我在此之后發現另一個編碼問題,我會確保更新。

SO Question I found that helped.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM