2014-04-25 33 views
2

代碼:使用的問題在急性受PHPMailer的

$mail = new PHPMailer(); 
$mail->isSendmail(); 
$mail->setFrom('[email protected]', 'Rene'); 
$mail->addAddress($_POST['email'],$_POST['name']); 
$mail->Subject = 'Confirmación'; 

伊夫用自己的「O」,而主題將顯示爲:Confirmación 在我的電子郵件帳戶。我也試過:

$mail = new PHPMailer(); 
$mail->isSendmail(); 
$mail->setFrom('[email protected]', 'Rene'); 
$mail->addAddress($_POST['email'],$_POST['name']); 
$mail->Subject = 'Confirmación'; 

它看起來像:Confirmaci &Ø一個CüT E,N。 我該如何解決這個傢伙。它需要出現在電子郵件收件箱中,如:Confirmación

回答

2

你似乎遇到你的第一個字符編碼錯誤。恭喜!你已經邁出了踏入一個致殘的世界,並且一直保留着巨大的錯誤。讓我們直接潛入。

我使用了自己的「ó」,該主題將在我的電子郵件帳戶中顯示爲:Confirmación。

我開始解釋爲什麼這件事發生之前,我想做出點清楚:你有有理由相信這會工作。在一個完美的世界裏,它會有的。你的工具失敗了。

當你在你的PHP源類型'ó',你沒有真正告訴PHP你認爲你是。你想說的是,「給我一個包含代碼點U + 00F3拉丁小字母O WITH ACUTE的字符串」。雖然PHP不會說Unicode,它的字符串實際上是字節向量。 PHP聽到的是「給我的字節向量< C3 B3>」,所以它確實如此。通過消息到達屏幕的時間,東西決定這些字節字符數必須根據微軟代碼頁1252編碼:

$ echo 'ó' | iconv -f cp1252 
ó 

這可能是PHPMailer的行爲,但對於PHPMailer::$Subject的文件只是說

消息的主題。

所以這不完全是一個很大的幫助。


好吧,我在PHPMailer的bug跟蹤周圍挖了一下,我發現this conversation。有很多東西不適用於這種情況,但我did設法得知PHPMailer::$CharSet屬性也適用於標題。 (文件:「字符集的消息的」),因此,它似乎適合自己情況的正確的解決方法是

$mail->CharSet = 'UTF-8'; 

添加行至第一個腳本的底部。

1

看看這篇文章,並嘗試在那裏的選項,設置編碼應解決它。

php mail special characters utf8

+0

請不要這樣做。 'utf8_decode'被錯誤地命名;它應該被稱爲'utf8_to_iso_8859_1',因爲這是它實際上的轉換。當實際的UTF-8支持可用時,沒有理由使用它。 – Alex