2012-04-16 63 views
1

當我發送包含使用PHP郵件£的電子郵件時,它以outlook的形式出現在outlook/hotmail中。在Gmail/Thunderbird中沒問題。PHP發送電子郵件主題 - Hotmail/Outlook顯示£爲£

任何想法如何解決這個問題?就在今天

+3

什麼字符編碼的結果嗎? – jimw 2012-04-16 21:42:51

+2

這是一個UTF問題 - 您正在使用某些OTHER字符集的文檔中嵌入UTF-8字符。 – 2012-04-16 21:56:18

回答

3

的問題是,客戶端不知道是什麼編碼用於對主題進行編碼。無論您的應用程序設置在Content-Type標頭中,只適用於電子郵件的正文,而不是標題。

通常這會影響以下標題:

  • 主題

爲了使用不同的編碼的國際化標題行應MIME編碼(截至RFC 2047),使用以下兩種方法之一:base64(B)或修改的quoted-printable(Q)。編碼後的患者通常是這樣的:

Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile 

這看起來很難,但在PHP中一個非常有用的輔助功能,做所有的魔法:

或者你可以考慮討論下:

使用quoted_printable_encode()直接與你啃老族,長期線需要在一定的長度被拆分的空間需要用下劃線替換爲「考慮到之前_ 」。

0

我固定一個類似主題的編碼問題通過使用phpmailer而不是PHP的內置mail

$mail = new PHPMailer(true); 
$mail->IsSMTP(); 
$mail->CharSet = "utf8"; 
$mail->Subject = $mail->EncodeHeader("You won £10000000!"); 
.... 
$retval = $mail->Send(); 
0

嘗試使用UTF-8編碼的電子郵件。

1

我通常使用mb_convert_encoding()功能

mb_convert_encoding($string, "UTF-8"); //AUTO DETECT AND CONVERT 
mb_convert_encoding($string, "UTF-8", "latin1"); //MANUAL SET - CHANGE latin1 TO CURRENT ENCODING 
0

這是您使用此文爲我的

<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>