Filed Under (Note) by a-wei on 31-07-2006

留言版的機制,幾乎是每個企業網站都會設置的一項機制。

用來接收客戶的需求訊息,然而客戶留了言之後,系統可以自動將訊息郵寄給相關的工作人員。

郵件傳送乍聽之下應該是沒有什麼困難,然而真正在撰寫的過程中,卻是處處碰壁。

問題在於編碼的問題 ..

現在各大網站幾乎都是以 utf-8 在編碼 ,資料庫也是,為的是讓整個系統可以不坐大幅度的修正,就可以支援各種語系的文字。

然而郵件系統卻不這麼聰明 … 特別是 hotmail … 中文系統的 hotmail .. 僅支援 Big5.

要是你的郵件是以 utf-8 編碼的 … 寄到 hotmail 信箱鐵定看不見內容 .. 簡直就是鬼畫符.

以下說明奮戰兩天的成果 .. 真可謂不屈不撓 .. 屢敗屢戰 .. 奮戰不懈 .. 嘔心瀝血 .

先說明一下系統環境 ..

1. 網頁編碼─> utf-8

2. 資料庫編碼 -> utf8

3. 發送郵件編碼 -> big5

在程式的運作過程 .. 發送郵件的程式碼是在最末段 .. 也就是當留言訊息等內容寫入資料庫之後所引發的動作。

but .. 這時候程式內所接收到的資料 .. 已經完全是 utf8 編碼的資料了 .. 為了要依照我們的需求 - 產生 big5 編碼的郵件

. 這時就必須要轉碼。

就是這個轉碼的函示 . mb_convert_encoding($body,$email_charset,$web_charset);

有哪些地方要轉碼?

1. 寄件者名稱 .

2. 收件者名稱.

3. 郵件主旨.

4. 郵件本文.

拿上面那個轉碼函示來說 .. $body 就是我們所要轉碼的內容 , $email_charset 是我們要發送郵件的編碼.

$web_charset 是目前網站所採用的編碼為何?

拿我自己來說 .. 我現在要把 $body 這個郵件內容轉成 big5 .. 且我的網站是採用 utf-8 編碼 .. 這時候我的程式就要這樣子寫:

$email_charset = “big5″;

$web_charset = “utf-8″;

$body = mb_convert_encoding($body,$email_charset,$web_charset);

其餘的寄件者 、收件者、主旨 .. 就依樣畫葫蘆了。



Post a comment

Name: 
Email: 
URL: 
Comments: