1 頁 (共 2 頁)

[教學] 網站UTF-8化之後,郵件標題在webmail上會變成亂碼的簡易修改

發表於 : 2005-04-09 23:28
dayto
很多人都會提到網站UTF-8化之後,phpbb寄出的信在webmail上主旨會變成亂碼,當然小弟也是
後來在其他php網站找到一個好用的function,那就是iconv()函數,至於怎麼改請往下看

環境需求PHP版本 >= 4.0.5 而且有把iconv模組編譯進去
適用版本:2.0.13(因為我是用2.0.13啦,其他版本應該也行)
適用語系:正體中文

修改方式

代碼: 選擇全部

# 
#-----[OPEN]---------- 
# 
includes/emailer.php

# 
#-----[ FIND 尋找]--------------------------------------------- 
# 
$result = smtpmail($to, $this->subject, $this->msg, $this->extra_headers);

# 
#-----[ BEFORE, ADD 之前,加上]--------------------------------------------- 
#
$this->subject = iconv('UTF-8','Big5',$this->subject);

# 
#-----[ FIND 尋找]--------------------------------------------- 
# 
$result = @mail($to, $this->subject, preg_replace("#(?<!
)
#s", "
", $this->msg), $this->extra_headers);

# 
#-----[ BEFORE, ADD 之前,加上]--------------------------------------------- 
#
$this->subject = iconv('UTF-8','Big5',$this->subject);

# 
#-----[ SAVE/CLOSE ALL FILES 儲存/關閉所有檔案 ]------------------- 
# 
# EoM 修正結束
#
如果您的網站是簡體中文請把

代碼: 選擇全部

$this->subject = iconv('UTF-8','Big5',$this->subject);
改成

代碼: 選擇全部

$this->subject = iconv('UTF-8','GB2312',$this->subject);
經過以上修正之後,在yahoo的web mail上看信就不會變成亂碼了
不過這種方式比較適合採用單一語系的網站,如果是多語系共存的
還是會出問題

發表於 : 2005-04-10 12:06
alex1114
說真的
我用 PHPBB 架設論壇有一段時間了
本來我的 Apache 預設的輸出編碼是 Big5
沒考慮到太多編碼的問題

後來因為架設網站伺服器久了
對於編碼有一點點認識
發現 UTF-8 的確有其優點
而且使用的 osc 是 UTF-8 版本\r
所以 Apache 不得不更改\r

這樣導致很多東西要改\r
除了很多 PHP 程式的語系檔要變更編碼外
程式發出的信件是亂碼是一個很大的問題 (包含信件主旨及信件內容)
例如我最近在測試的 4images 像簿藝廊程式
改完語系檔的編碼及新增語系檔內容 (新增語系檔內容要稍微修改主程式)
寄出的信件也一樣是亂碼 (當然一樣是信件主旨及信件內容)

找了老半天\r
也去官方網站找\r
總是找不到\r

竟然在這篇文章被我找到解法
剛剛順便用這個方法稍稍修改了 4images 的程式
真的可以寄出 UFT-8 的信件了

等會把 phpbBB 也改一下
我相信這是主程式沒考慮到雙位元語言的問題前
一個很好的解法

寫了這麼多
真的要跟發現解法的這位朋友
說聲\r
謝謝您\r

2005/04/11 加註如下:
1. 嗯~~不好意思,我就是用 Windows Server 2003 架設 Apache + PHP + MySQL + ActivePerl,除了這次遇到發送信件編碼的問題,其他問題好像還沒發生過。
2. 我不只改了信件標題,信件內容的編碼一併改了。

依舊感謝,正在好好研究 iconv 函數中

發表於 : 2005-04-10 17:37
dayto
其實是因為在其他站有看到人家討論關於中文簡繁互換的方式,才發現到iconv()
這麼好用,我發表的修改法是修正主旨部分,其還可以做更好的應用,譬如設計
一個函數能判斷郵件主旨的哪種語言,然後再用iconv()去轉換成相對應的語系\r
這樣就能適用在多語系共存的網站了^^

發表於 : 2005-04-10 20:00
Mac
如果是 windows 架站的話,那 iconv() 就...

~Mac

發表於 : 2005-04-10 23:01
dayto
Mac 寫:如果是 windows 架站的話,那 iconv() 就...

~Mac
windows平台也可以使用iconv()

請看
http://www.neo.com.tw/archives/000347.html

上述連結轉自Neo's Blog

發表於 : 2005-04-16 01:19
hi3b
其實 ....

既然要 UTF 化 ... 那就要整套系統全部都 UTF 化
包括英文的部份資料, 也要全 UTF 化 .....

既然 Unicode 稱為 萬國螞. 就是只要電腦上有 unicode 的內碼表在\r
就所有的語文都能讀. 不管是韓文 日文 法文 英文 .... 都能讀
而不會看到的是 亂碼.

如果, 只把中文的部份 UTF8 化. 英文的部份不去改為 UTF8
還放著 ISO- .... 的 Charset 不改 .....
那當然, 就會發生這種, 送出去的 email 不是完整的 UTF-8

於是, 收到信的 OUTLOOK 無法認為這封是是 Unicode 的信 ...
就保持以中文正體 或 中文簡体來讀 ..... 可中文  內容是 UTF8 的
所以, 收信時會看到  標題是亂碼. 還要逐封的去  改 文字的編碼為 Unicode 才能讀 .... 或 解決標題的亂碼 ....

怎不把, 整套的 phpbb 全都 UTF8 化. 不只 big5 要改為 UTF-8
Charset 要改為 UTF-8
只要整套資料中, 有關 Charset 的都要改成 UTF-8 .... 當然英文的
ISO-xxx 也要改為 UTF-8

那就無需這麼麻煩的改程式. 又要限制只能一種語言 ....
那豈不就失去了. UTF-8 化的義意了嗎 ??

我們幫北美的一家網站, 設立了一個 phpBB 的 Forum ....
因為我們要求, 要有中文區. 對方又不希望英語的使用者, 看到中文
可我們又要設成中文的使用者要有中文 ....

最後的辦法, 就是全面 UTF8 化.

中文的使用者, Browser 上是 ZH-TW 的字碼.. 接入網站時
網站顯示出來的是 UTF8 的正體中文.
ZH-CN 的使用者接入時, 網站顯示的是 UTF8 的簡体中文

其他人接入時, 網站顯示的是 UTF8 的英文 ......
所有的顯示都是 UTF8 .... 因此, 自動發信時
當然也是全都是 UTF8 ...... 收到的信  整封連標題都是 UTF8時
OUTLOOK 自動判斷這封信是完全的 UTF8 ... 就以 UTF8 顯示

根本沒有亂不亂碼的問題.

發表於 : 2005-04-18 07:30
alex1114
hi3b 的整篇回覆,個人十分贊成。到目前為止,以個人有使用的網站架設程式而言,我只看到 osc 有釋出完整的 UFT-8 化程式 (或許其他程式也有,但是個人沒用過),而且並非官方釋出的 (由網路甘仔店 KMD&OSC 提供)。

要做到 hi3b 所謂的完整 UTF-8 化,我相信不僅僅只是將程式檔案轉個編碼,並把相關的編碼指定為 UTF-8 而已。想必需要對於整個程式 (不管是哪一支程式,不只 phpBB),甚至對 PHP 處理文字編碼要有一定程度的熟悉及改寫技巧。個人的淺見是,大部分的使用者並不具備這樣的技能。大部分的進階使用者頂多做到局部改寫,能不能做到整個程式通體適用,又或合不合宜,恐怕不是大部分的人能做到的事情。

十分誠心期待竹貓的相關人員能夠看到『完整 UTF-8 化』的需求,因為就個人認知而言,UTF-8 的確是解決各國不同編碼的合適方案。並且由地區語系官方網站發佈最是適合不過,又或是由竹貓向 phpBB 官網反應此類需求。

初期,或許跟現在的許多程式一樣,會需要發佈地區語系版本及完整 UTF-8 化版本兩種,但是...

個人相信,所有的網站程式走向完整的 UTF-8 化是一個趨勢。畢竟完整的 UTF-8 化好處多過於壞處 (例如靜態的 HTML 網頁檔需要轉碼,不過很多程式可以輔助並批次解決),而且對於正體中文而言,似乎得到的好處多過於其他國家的地區編碼,因為衝碼字一直都是很多人心中的痛。

而且,很多設定值在網站架設初期,的確應該予以考慮,因為許多牽涉到整個網站的設定 (例如網站的編碼設定),一旦到了『有需要的時候』再變更,工程浩大不打緊,最重要的是,不一定改的完美、改的成功。

許多解決方案散落在不同的論壇、個人文章、甚至是 Blog 中,要找這種牽涉到整個程式的解決方案,真的很不容易,期待這個討論串可以是一個開端。

舉例而言,要把我現在正在使用的像簿程式 4images 發的信件從文字格式改為 HTML 格式的解決方案,是在官方網站找到的。信件主旨及內文編碼的問題,是在這篇文章找到。雖然這篇文章是在討論 phpBB 發信的問題,但是的確是一個解決方案,畢竟 4images 也是 PHP 寫成的。

所以,除了期待『phpBB 正體中文強化小組 - 竹貓星球』能夠對於 UTF-8 化的需求有所考慮之外 (或跟官網反應一下),也希望有類似經驗的其他先進能夠將經驗釋出。

hi3b 您之前所做的專案似乎與我現在的需求十分類似,不知道有沒有機會向您請教?又或是,在不牽涉貴公司商業機密的情況下,把您修改的過程予以公佈?相信對於許多人會有很大的幫助的。

感謝各位的熱心~~我們這些不會寫 code 的使用者才有這麼多程式可以使用。

發表於 : 2005-04-18 10:34
richer
請問一下這是所謂utf-8化不完全才會產生的嗎?

我試過我的phpbb所寄出去的信\r
如果利用webmain的方式去看信的話就會是亂碼\r
例如以下的情況
 當我到pchome的網站去看信的時候
 因為pchome的網站是採用big5的編碼方式
 所以看到的會是網站正常 信件亂碼\r
 改成 utf-8 後 會是信件正常 網站亂碼\r
 IE 採用 big5 編碼下的情況
圖檔
 IE 採用 utf-8 編碼下的情況
圖檔

我想原PO所問的問題是這樣各問題吧\r
不知道這是因為utf-8不完全的關係嗎?

發表於 : 2005-04-18 10:38
johnkk
那是pchome的問題....
因pchome 再開啟網頁時使用big5碼 做為網頁語文...
當你在ie改為 utf-8 時 pchome的網頁 文字就會變亂碼~

發表於 : 2005-04-18 11:48
hi3b
alex1114 寫: hi3b 您之前所做的專案似乎與我現在的需求十分類似,不知道有沒有機會向您請教?又或是,在不牽涉貴公司商業機密的情況下,把您修改的過程予以公佈?相信對於許多人會有很大的幫助的。
謝謝您的回應 ....
我們所以拿出來說, 就是希望自己完成的工作成果, 能與大家分享.

目前, 唯一的困擾是, 我們自己使用的 phpBB 2.0.14 程式與語系檔, 是先回 2.0.13經過一些修改之後才 UTF-8 化. 之後才修改為 2.0.14 版

手頭上, 目前沒有由原版 2.0.14 並 UTF-8 化的完整檔案. 因為工作進度的摧趕,
一時還無法安排時間來做你所說的工作...

因為我們使用的語系檔, 增加與修改過的部份太多, 要把我們使用的 UTF8 化語系檔改回原版, 需要逐行的核對. 這需要花比較多的時間.
不然, 我們寧可直接把我們使用中的檔案, 直接都丟出來給大家參考.
因此, 才會只把關UTF8化的關鍵要點, 在此提了. 沒隨附釋出檔案.
這一點實在十分的不好意思 .....

這樣好了, 我儘快進行這工作, 把整個檔案重新整理後. 丟出來請大家指正.

發表於 : 2005-04-18 11:55
hi3b
johnkk 寫:那是pchome的問題....
因pchome 再開啟網頁時使用big5碼 做為網頁語文...
當你在ie改為 utf-8 時 pchome的網頁 文字就會變亂碼~

對的. 那的確是因為 PC-Home 所送出的網頁, 設定為 Big-5 碼.
因此, 我們打開 PC-Home 的 Webmail 網頁時, 若是 Browser 的編碼設為繁體, 就能看到 PC-Home 本身網頁是正確的字碼. 但 UTF-8 化的信文卻成亂碼.
若是把 Browser 的編碼設為 Unicode, UTF-8 化的信文就能讀了, 但 PC-Home 本身網頁其他部份的中文卻成為是亂碼了.

發表於 : 2005-04-18 22:40
hi3b
alex1114 寫: 感謝各位的熱心~~我們這些不會寫 code 的使用者才有這麼多程式可以使用。
我再仔細的查看, 為了 unicode 化, 我改了那些檔 ....
其實也有改的也只是 /language/ 裡頭的所有檔案
有關 charset 一律要改為 utf-8

譬如英語的部份
/language/lang_english/*.*
/language/lang_english/email/*.*
裡頭所有的檔, 查到有 iso-8859-1 的全改為 utf-8

台灣正體漢文的
/language/lang_taiwan/*.*
/language/lang_taiwanl/*.*
裡頭所有的檔, 查到有 big5 的全改為 utf-8
並注意要以 utf-8 的格式 並去除 bom 的格式存檔

中國簡体漢文的
/language/lang_zhonggou/*.*
/language/lang_zhonggou/*.*
裡頭所有的檔, 查到有 gb2312 的全改為 utf-8
並注意要以 utf-8 的格式 並去除 bom 的格式存檔

就醬就能全面 utf-8 化了 ....
如果真的自己不知怎麼改起, 我站上
http://hi3b.com/download.php 擺了兩個檔
一個包含英語與台灣正體漢文的utf-8化的 Hi3B官方版
一個是只有台灣正體漢文的 utf-8化的 Hi3B官方版

有興趣歡迎取去享用

發表於 : 2005-04-19 03:16
alex1114
hi3b 兄,看來你我都是被專案壓的喘不過氣來的上班族 :mrgreen:

基本上我從事的工作,跟軟體本地化有著極大的關係 :oops: ,幾個年度大案子開始起跑,著實讓人分身乏術,不過看到最後的成果可以呈現在眾人面前,也算開心,雖然我們『不可以』把自己的名字加在軟體的工作人員名單裡 (這點最不開心,雖然這一切都是虛名,就跟浮雲一樣 :-o ),但是中文化後的軟體可以讓更多人使用 (很多程式軟體或是網站、甚至技術文件,就在你我日常生活之中,隨處可見),想到這點,熱血依舊持續燃燒中,做這行沒點根性,真是不容易撐下去。

每次拿到有語系檔的程式,總是忍不住就給它改下去,過於直譯的句子,改!介面不一致,當然也改!好在最近終於被我想出方法,讓我自己修改過的語系檔在有軟體更新時,可以保持以最少的時間成本,做出最多的更新。其實早該想到的,但是我聯想力差,到最近才把幾個在其他專案用到的技巧統合起來。

簡單的說,流程如下:
1. 使用軟體為 TRADOS,各位沒聽說過這軟體是很正常滴~~(逃~~)
2. 再把某個您想要修改的語系檔的網站程式的語系檔修改好,這很重要,修改比對雖然很辛苦,但是累也只累這一次。
3. 用 TRADOS 裡的 WinAlign (分析斷句的設定部分需要詳加設定),將同一版本的中文 (自己修改過那個) 及英文語系檔作分析比較,做出 Translation Memory (TM)。
4. 日後該軟體如果因為升級新增語系檔內容的話,基本上新的語系檔內容透過 TRADOS 的處理過後,原有的翻譯可以使用 TM 完全代掉,只翻譯新增內容的部分。而新增內容的部分翻譯過後,又可以將 TM 更新,如此以來,使用這程序永遠只需翻譯新增內容的部分。

好處是:
1. 可以被 TM 代掉的內容永遠具有一致性,當然,修改過有錯字的內容也永遠會有錯字 (這也是一種一致性 :oops: ),不過,TM 是可以被修正的。
2. 減少翻譯及比對程式碼的時間成本。因為假如設定的好,永遠只有語系檔的內容被翻譯。舉例而言,在 phpBB 裡的英文語系檔中有一支檔案 lang_admin.php 裡有『$lang['General'] = 'General Admin';』,被 TM 代掉的地方永遠只有『General Admin』等於『一般管理』,而不必理會『General Admin』以後在這個 Term 之前的變數是不是『$lang['General']』。假如想一想,就知道好處在哪了。
3. 假如 TM 夠大夠完整,甚至可以做到先機器翻譯然後再修辭。例如事前翻譯過『This is a dog.』等於『這是一隻狗。』,而『cat』這個單字也曾被翻譯過為『貓』,那將來出現『This a cat.』是可以被機器直接翻譯為『這是一隻貓。』的 。請注意,是連標點符號一起代掉。

個人一直覺得,TRADOS 是輔助翻譯的優良工具程式。可是好像除了業界之外,就沒多少人使用了,真是可惜!不過有心學的人請不要叫我提供,有心找一定找得到,而且我在公司都用正版的 (有 Keypro 保護的,一套不少錢,不過有適合個人使用的較低價版本)。

總之,hi3b 兄在上篇提到的方式,這週六日我會再試試看~~嗯~我好像上班下班都坐在電腦前耶~~也難怪成為『去死去死團』的標準團員了~~

有心要做的各位朋友,不管您用的轉碼工具是什麼,記得轉檔完要存檔前務必要拿掉 BOM 喔 (雖然一般的情況下是看不到 BOM 啦~)!

用 Ultraedit 一支一支轉的朋友 (其實可以錄製 Macro 批次轉檔),10.20b 之後才有明確的選項可以讓您再轉檔完畢存檔時取消 BOM 的選項。假如您怕 Ultraedit 英文版太多英文看不懂,也請不要下載在台灣下載的到的代理商翻譯的繁體中文版,錯譯一堆,還把整個程式的專案檔一起包進去安裝檔內,足足使繁體中文版比其他語系的官方版本大了 2.5 到 3 倍的體積。要找之前 Kii Ali 製作的 10.20b,請至對岸尋找。一定要用 10.20b,10.20a 對中文字的處理有嚴重的 bug。

用 ConvertZ 整批轉檔的朋友,7.40 (含) 以前的版本,也請記得取消預設的 [加 BOM 到 UTF-8 檔案] 選項再轉。8.00 以後版本這個選項改為預設不勾選,不過 8.00 還在 Beta 階段,在官方論壇仍有許多錯誤報告被提出。

發表於 : 2005-04-19 11:30
hi3b
alex1114 寫:hi3b 兄,看來你我都是被專案壓的喘不過氣來的上班族 :mrgreen:
其實, 我十多年前就從工作崗位上退休了 ...
alex1114 寫: 基本上我從事的工作,跟軟體本地化有著極大的關係 :oops:
難怪 ~~ 才會用到那種專業軟體 "轉多思" TRADOS ... 聽說很好用, 可我還是頭一回聽到\r
二十年前, 我們用一些 debug 的程式, 去修改 .exe .com 檔案裡的 message
中文化 ....
alex1114 寫:
個人一直覺得,TRADOS 是輔助翻譯的優良工具程式。可是好像除了業界之外,就沒多少人使用了,真是可惜!不過有心學的人請不要叫我提供,有心找一定找得到,而且我在公司都用正版的 (有 Keypro 保護的,一套不少錢,不過有適合個人使用的較低價版本)。
於是我很用心的找破解版 ~~~
alex1114 寫: 有心要做的各位朋友,不管您用的轉碼工具是什麼,記得轉檔完要存檔前務必要拿掉 BOM 喔 (雖然一般的情況下是看不到 BOM 啦~)!

這可非常的重要

發表於 : 2005-04-24 16:41
dayto
我發表這篇文章時沒有說的很清楚,先跟大家說聲抱歉

基本上我用的2.0.13的phpbb是已經採用天霜大提供2.0.11多國語言修正再加上
neo大提供多國語言修正的方式了,如果有看過這兩位大大提供的修改方式就知\r
道,經過這樣修正網站已經是全部UTF-8化了,但是問題在於很多使用者是習慣\r
在webmail上收信看信(小弟也不例外),而偏偏pchome yahoo的網頁編碼都是\r
big5,這樣就會造成主旨上會變成亂碼,這不是phpbb UTF-8化的錯,而是這些
入口網站的問題,所以才會去想辦法作這個修正出來,如果全世界的網頁都能\r
UTF-8化,那麼根本不用擔心這個問題

我發表的修正方式其實是針對webmail的,而不是outlook,沒說清楚還請大家見諒