我閱讀了很多關於如何將UTF-16轉換爲UTF-8的帖子,但沒有人建議如果我同時使用這兩種方法。我試圖將使用PHP的UTF-16和UTF-8字符的電子郵件正文文本插入到SQL Server 2008表列(UTF-8)中。將UTF-16和UTF-8文本字符串轉換爲UTF-8
我用iconv()
從UTF-16轉換爲UTF-8,但正如我說,這是不夠的,因爲它不處理UTF-8:
$email->description_html = iconv("UTF-16","UTF-8//TRANSLIT",$that->getMessageText(
$msgNo, 'HTML', $structure, $fullHeader,$clean_email));
$email->description = iconv("UTF-16","UTF-8//TRANSLIT",$that->getMessageText(
$msgNo, 'PLAIN', $structure, $fullHeader,$clean_email));
我想這兩個UTF-16和UTF-8,但它不工作,給出了一個數據庫錯誤:
can't convert UTF-16 to UTF-8
$email->description_html= iconv('','UTF-8',$that->getMessageText(
$msgNo, 'HTML', $structure, $fullHeader,$clean_email));
我不知道自己還能做什麼,請幫助。
在一個文本字符串中不應該有「具有UTF-16和UTF-8」這樣的事物。如果是這樣,則字符串被破壞。必須有一個指示符說明使用哪種編碼,並且只有這種編碼。必須信任該指標以將字符轉換爲其他編碼。如果不起作用:指責錯誤地聲明編碼不正確的來源。 – Sven 2013-04-07 19:33:40
謝謝Sven,在這種情況下,我在同一封電子郵件中使用了兩個ecodings:使用防病毒程序掃描的希伯來字符(UTF-8)的電子郵件,其中添加了一封電子郵件擴展文本,它被驗證 - 該電子郵件擴展或稱爲附件,只是它不完全是一個附件...)是UTF-16(就像NDR - 未送達報告擴展,自動添加到電子郵件文本)。當我嘗試插入到數據庫(UTF-8)時,出現字符串爲UTF-16的錯誤。當我把它作爲UTF-16處理時,我可以不知道有UTF-8的字符。 – Rodniko 2013-04-08 02:46:57
然後你的防病毒程序就被打破了。它不應該使用不同的編碼將文本添加到電子郵件正文部分。 – nwellnhof 2013-04-08 13:57:50