中央論壇 - CENTER BBS

標題: PHP mail() UTF-8 亂碼解決 - 寄件者名稱與信件標題中文亂碼問題 [打印本頁]

作者: 死神    時間: 2015-6-1 00:19
標題: PHP mail() UTF-8 亂碼解決 - 寄件者名稱與信件標題中文亂碼問題
UTF-8內文傳遞是基本款,header內請記得設定編碼:
  1. Content-type:text/html;charset=UTF-8
複製代碼
但寄件者名稱與標題勒? 這問題很有趣,因為這兩項不屬於內文所以mail source就會看出原因了,在多數的mail軟體上應該就能體會到亂碼(如Gmail)。所以用PHP原生mail()函式就得需自行處理編碼。




編碼的處理語法如下:
  1. "=?UTF-8?B?".base64_encode('中文')."?="
複製代碼
就如同BIG5編碼形式,前後需加上前綴後綴,內文則用BASE64編碼,形成一般郵件軟體通吃的編碼。




給個範例:

  1. $from_name = "=?UTF-8?B?".base64_encode('寄件人')."?=";
  2. $subject = "=?UTF-8?B?".base64_encode('主旨')."?=";

  3. $header = "Content-type:text/html;charset=UTF-8" . "\r\n";
  4. $header .= "From: {$from_name} <service@yidas.com>\r\n";
  5. $header .= 'Reply-To: service@yidas.com' . "\r\n";
  6. $header .= ($bcc) ? 'bcc:service@yidas.com' : '';

  7. echo mail('to@demo.com', $subject, 'content', $header);       
複製代碼
方法可自行封裝,另外 mb_internal_encoding 並不能完全解決通吃問題,所以目前採用此方法中。




歡迎光臨 中央論壇 - CENTER BBS (https://www.centerbbs.com/) Powered by Discuz! X3