![](/img/trans.png)
[英]PHP iconv from utf-8 to windows-1252 with no special characters
[英]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_mimeheader
或iconv_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.