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

phpBB Installation & Usage Support
phpBB 2 安裝於各類型作業平台之問題討論;外掛問題,請到相關版面依發問格式發表!
(發表文章請按照公告格式發表,違者砍文)

版主: 版主管理群

版面規則
本區是討論關於 phpBB 2.0.X 架設安裝上的問題,只要有安裝任何外掛,請到外掛討論相關版面按照公告格式發表。
(發表文章請按照公告格式發表,違者砍文)
dayto
星球普通子民
星球普通子民
文章: 5
註冊時間: 2004-12-19 02:43

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

文章 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上看信就不會變成亂碼了
不過這種方式比較適合採用單一語系的網站,如果是多語系共存的
還是會出問題
最後由 dayto 於 2005-04-24 16:45 編輯,總共編輯了 1 次。
alex1114
星球普通子民
星球普通子民
文章: 3
註冊時間: 2004-06-14 01:43
來自: 新北市鶯歌區
聯繫:

文章 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 函數中
最後由 alex1114 於 2005-04-11 16:28 編輯,總共編輯了 2 次。
dayto
星球普通子民
星球普通子民
文章: 5
註冊時間: 2004-12-19 02:43

文章 dayto »

其實是因為在其他站有看到人家討論關於中文簡繁互換的方式,才發現到iconv()
這麼好用,我發表的修改法是修正主旨部分,其還可以做更好的應用,譬如設計
一個函數能判斷郵件主旨的哪種語言,然後再用iconv()去轉換成相對應的語系\r
這樣就能適用在多語系共存的網站了^^
Mac
百戰天龍馬蓋先
百戰天龍馬蓋先
文章: 2590
註冊時間: 2003-02-02 02:28
來自: MacphpBBMOD
聯繫:

文章 Mac »

如果是 windows 架站的話,那 iconv() 就...

~Mac
+ 關於 phpBB 使用問題請在版面發問,私人訊息提供其他不相干或是隱私的事情聯絡之用。

phpBB 官網 | 竹貓星球 | MacphpBBMOD | 我的服務
dayto
星球普通子民
星球普通子民
文章: 5
註冊時間: 2004-12-19 02:43

文章 dayto »

Mac 寫:如果是 windows 架站的話,那 iconv() 就...

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

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

上述連結轉自Neo's Blog
hi3b
星球普通子民
星球普通子民
文章: 12
註冊時間: 2005-01-20 21:45

文章 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 顯示

根本沒有亂不亂碼的問題.
alex1114
星球普通子民
星球普通子民
文章: 3
註冊時間: 2004-06-14 01:43
來自: 新北市鶯歌區
聯繫:

文章 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 的使用者才有這麼多程式可以使用。
richer
星球公民
星球公民
文章: 170
註冊時間: 2004-09-14 12:55
來自: 幻想的世界
聯繫:

文章 richer »

請問一下這是所謂utf-8化不完全才會產生的嗎?

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

我想原PO所問的問題是這樣各問題吧\r
不知道這是因為utf-8不完全的關係嗎?
DC club 對分散式運算的小小貢獻
Matiz Club
●空間商: ACSite.NET
●服務程式:Linux + LiteSpeed V5.4 + php 5.2.14 + MySQL(i) 5.0.85 + phpBB 3.0.11
頭像
johnkk
星球公民
星球公民
文章: 234
註冊時間: 2003-02-21 19:15
來自: 來自蝸牛鎮
聯繫:

文章 johnkk »

那是pchome的問題....
因pchome 再開啟網頁時使用big5碼 做為網頁語文...
當你在ie改為 utf-8 時 pchome的網頁 文字就會變亂碼~
對Red Hat Linux還是一位新手..
但決不會因為難而放棄的
越是難搞越有興趣~^.^~

歡迎參觀我的網站
http://www.snailtown.idv.tw/
圖檔

●架設主機作業系統:Linux
●網站連結: http://www.snailtown.idv.tw/
●您的上網方式:ADSL
●您安裝的程式:Apache + php + MySql
●您的 phpBB2 版本:2.015
hi3b
星球普通子民
星球普通子民
文章: 12
註冊時間: 2005-01-20 21:45

文章 hi3b »

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

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

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

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

這樣好了, 我儘快進行這工作, 把整個檔案重新整理後. 丟出來請大家指正.
hi3b
星球普通子民
星球普通子民
文章: 12
註冊時間: 2005-01-20 21:45

文章 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 本身網頁其他部份的中文卻成為是亂碼了.
hi3b
星球普通子民
星球普通子民
文章: 12
註冊時間: 2005-01-20 21:45

文章 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官方版

有興趣歡迎取去享用
alex1114
星球普通子民
星球普通子民
文章: 3
註冊時間: 2004-06-14 01:43
來自: 新北市鶯歌區
聯繫:

文章 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 階段,在官方論壇仍有許多錯誤報告被提出。
hi3b
星球普通子民
星球普通子民
文章: 12
註冊時間: 2005-01-20 21:45

文章 hi3b »

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

這可非常的重要
dayto
星球普通子民
星球普通子民
文章: 5
註冊時間: 2004-12-19 02:43

文章 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,沒說清楚還請大家見諒
主題已鎖定

回到「phpBB 2 安裝與使用」