2012-10-18 42 views
0

最近,我們已將環境轉換爲使用UTF-8編碼。一切似乎都很完美。正在用UTF-8正確提供頁面,並且使用PHP的mail()函數發送的電子郵件也正在發送(在我們的情況下)法文字符正確顯示。今天早上,我開始用它們的多字節副本(例如,mb_strlen(),mb_send_mail())替換非多字節字符串函數(例如,strlen(),mail()),它似乎是在所有情況下按預期工作,除了mb_send_mail(),其中法文字符顯示爲問號。奇怪的是,它們在使用郵件()時顯示正確。在這兩種情況下,我還會在電子郵件標題中將charset設置爲utf-8,並在我的電子郵件客戶端中檢查它是否確認它是以這種方式發送的。mail()可用,而mb_send_mail()不適用於多字節環境

我要補充一點,我不使用的函數重載功能,因爲我擔心它會與我們使用,這就是爲什麼我選擇了手動替換功能的第三方擴展干涉。在php.ini

編輯

這些線路進行了修改/添加的:

default_charset = "utf-8" 
mbstring.language=Neutral 
mbstring.internal_encoding=utf-8 
mbstring.http_input=UTF-8 
mbstring.http_output=UTF-8 
mbstring.encoding_translation=On 

我的PHP文件也都保存在UTF-8編碼,無BOM。

調用mb_send_mail()函數時,代碼如下:

$to = "[email protected]"; 
$subject = "Assigné"; 
$body = "La demande suivante vous a été assigné : " 
$headers .= 'From: ' . $from . "\r\n"; 
$headers .= 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-Type: text/html; charset="utf-8"' . "\r\n"; 
$headers .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n"; 

if (!(@mb_send_mail($to, $subject, $body, $headers))) { 
//Error message 
} 

正如我在原來的職位說明,使用mb_send_mail()函數的時候,我所有的電子急性(E)的字符,包括電子郵件的主題和bosy,顯示爲問號(?),但使用mail()函數時,它們按預期顯示。

+0

你是在什麼地方將語言和編碼設置爲UTF-8的?到處?很高興看到一些代碼和消息來源。 – transilvlad

+0

我在文檔中注意到,與需要用「\ r \ n」分隔多個額外頭部的mail()相反,mb_send_mail()期望「\ n」。我相應地修改了我的代碼,但它沒有解決問題。 –

+0

我做了一些研究,最喜歡mail()函數。如果它工作,爲什麼不使用它?您應該注意,沒有郵件服務器遵守RFC規定的信件,並且有很多程序設計非常糟糕,並且您的電子郵件可能存在問題。 – transilvlad

回答

0

保持mail()函數它的工作更好,據我所知。

請參閱PHP手冊mb_send_mail()其他人推薦它。

相關問題