PHP mail() 寄信亂碼問題

PHP 寄信函式: mail()

使用 PHP 寄信是件容易的事,只要使用 mail() 函式,就可以把信寄出,當然要配會您的郵件伺服器才行!但是問題是,寄出的信,收是收到了,可是中文字卻出現亂碼,這要如何是好?以下的解決方式可以提供您參考:

  1. mail() 的語法:
    mail(“收件人","信件主旨", “信件內容"[, 其他郵件標頭]);
    當我們在寄一封信時,需要填寫的資料,使用 mail() 時,當然都要填寫,所以不管是 收件人、信件主旨、信件內容…等等,都要記得寫上去,如下:
    mail(“kunte@pchome.com.tw","測試信","測試 mail() 寄信");
    再來就可以試試看能不能寄出了,當然您得檢查一下您的 php.ini 有沒有設好郵件伺服器。
  2. mail() 寄出的信,中文出現亂碼了!
    等到我們收到剛才寄出的信後,才發現中文部份全是亂碼!為什麼呢?因為我們沒有設定寄出的信件編碼 utf-8
  3. mail() 編碼設定-檔頭(Header)
    剛才的信是可以寄出沒錯,可是我們少設定了編碼方式,所以當我們的內容或是主旨、寄件者...等等,有出現中文時,就會產生亂碼問題,解決的方式則是在 檔頭 裡設定編碼方式!設定方法如下:
    <?php
    $Name="阿德"; //設定姓名為阿德
    $From="From:"."=?UTF8?B?".base64_encode($Name)."?="."
    kunte@pchome.com.tw“. “\r\n"; //設定寄件者,但要 utf-8 編碼 下方第四點說明
    $Type="Content-Type: text/html; //設定信件內容為網頁格式
    charset=utf-8\r\n"  ."Content-Transfer-Encoding:8bit\n\r"; //設定內容編碼方式為 utf-8 下方第五點說明
    $Header=$From.$Type; //設定 mail() 裡的 Header 內容
    $To=ader0311@hotmail.com; //設定收件者為站長的另一個信箱
    $Subject="=?UTF8?B?".base64_encode(測試信)."?="; //設定主旨,同樣為 utf-8 編碼
    $Content="測試中文字"; //設定信件內容
    mail($To,$Subject,$Content,$Header); //使用 mail() 寄信
    ?>
    請細說明請看下一點。
  4. Encoded-word 編碼方式
    =?<字集>?<編碼方式>?<編碼內容>?=
    主要設定在 寄件者或主旨有出現中文字的地方
  5. 內容的編碼方式
    Content-Type: text/html; charset=utf-8\r\n
    Content-Transfer-Encoding:8bit\n\r
    以上兩行為設定信件內容的編碼方式,其中 \r\n 為換行的意思,如同 HTML 裡的 <br>

有點難度,參考看看,以後我們可以用表單來點寫 姓名、寄件者、內容,按寄出才會把信寄出去,這樣子就成了意見箱了。

About these ads
關注

Get every new post delivered to your Inbox.

%d 位部落客按了讚: