簡體   English   中英

將imap主題行中的Windows-1252字符解碼為UTF-8

[英]Decoding Windows-1252 characters in imap subject line to UTF-8

我有一個網站,允許人們使用Outlook中電子郵件的主題行向其發布內容。 使用PHP和imap,獲取文本的主題行並將其存儲在mysql數據庫中。 但是有時,有人會將網站上的文本復制到該電子郵件的主題行中,而我會收到亂碼。 與此類似:

=?Windows-1252?Q?_Every_day_in_our_offices_we_recycle_cardboard, aluminium?==?Windows-1252?Q? = 96_won = 92t_you_join_us = 3F?=

我所做的是嘗試解碼此文本,以便使用以下代碼在頁面上將其正常顯示:

$subject = strip_tags($mailHeader->subject);
$header = imap_mime_header_decode($subject);
$subject = "";
for($i=0;$i<count($header);$i++)
{
    $subject .= $header[$i]->text;
}

完成后,我擺脫了大部分亂碼,但是留下了替換字符,包括em破折號和原始主題行文本中的彎引號。 看到下面的結果:

每天在我們的辦公室中,我們都回收紙板,鋁材,``您願意加入我們嗎?

網站的字符集設置為UTF-8。 當我將網站字符集設置為ISO-8859-1時,替換字符將替換為大括號和短划線,這很好,但是我想將網站的字符集保留為UTF-8。

在不將字符集更改為ISO-8859-1的情況下如何擺脫替換字符的任何幫助都將非常有用。 謝謝。

imap_mime_header_decode返回的每個對象imap_mime_header_decode包含一個charset屬性,您將忽略該屬性。 您需要在循環中使用類似以下內容的每個將其轉換為UTF-8:

$subject .= mb_convert_encoding($header[$i]->text, "UTF-8", $header[$i]->charset);

或者,考慮使用mb_decode_mimeheadericonv_mime_decode_headers函數。 這兩個函數都完成了為您解碼MIME頭的全部工作,並以PHP的內部編碼(通常為UTF-8)返回一個字符串。

上面的代碼可以工作,只是最后做了一點小改動:

$subject .= mb_convert_encoding($header[$i]->text, "UTF-8", $header[$i]->charset);

暫無
暫無

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

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