爬文及搜尋好久,還是找不到解決的方法,相當的困擾,不知站上是否有人能知道解決方法
就是使用者註冊後,寄出的確認信,標題能正確顯示,但是內文會變亂碼
我的環境是:
Drupal 5.1 繁體中文
Mail Server 和主機商確認後為 exim mail server, 使用 qmail 寄信,主機商也確認都支援UTF-8 (我從其他信箱寄 UTF-8 的信都正常)
用過 Gmail, Hinet, Hotmail, Yahoo, Horde, Squirrelmail 等等信箱,也確認編碼為 UTF-8,但是都是顯示亂碼
不知其他大大是否有遇到相同問題
請問有沒有解決方法
謝謝
Re: 註冊信內文產生亂碼
我倒是沒遇過。資料庫/表的編碼都正確/一致嗎?
Re: 註冊信內文產生亂碼
沒錯啊!! 都是 UTF-8
其他模組都可正確顯示
只有這個部份是亂碼,好困擾啊!!
Re: 註冊信內文產生亂碼
我剛剛去看了一下資料庫
發現資料都是存在 variable 這個資料表裡
如果說這個表格編碼錯誤
其他的顯示應該都是亂碼才對
更奇怪的是,只有信的內文才會這樣
標題也是從這個表格中撈出來的,但是卻可以正常顯示
真是有夠怪
請問這段寄出註冊信的這一段 code 是寫在那裡?
User這個模組嗎?
Re: 註冊信內文產生亂碼
嗯...我最近發現一個奇怪的狀況,就是用 K2 版型時,css 裡的附註的 url 會跟著寄去...很詭異...
你是用預設版型嗎?
寄註冊信是在 user module 裡沒錯。
Re: 註冊信內文產生亂碼
後來用 contact 模組來測,狀況是一樣的
所以我去查了 Code,發現都是用同一段 Code 及 Function 來 處理的
在Contact.module 有一個 drupal_mail 的 function
這個 function 是寫在 include/common.inc 中
Code 看起來沒有任何問題,也試著去改MIME Type都是一樣
function drupal_mail($mailkey, $to, $subject, $body, $from = NULL, $headers = array()) {
$defaults = array(
'MIME-Version' => '1.0',
'Content-Type' => 'text/plain; charset=UTF-8; format=flowed',
'Content-Transfer-Encoding' => 'quoted-printable',
'X-Mailer' => 'Drupal'
);
而且奇怪的是 $subject 不會亂碼,所以可以確定從資料庫中撈出都是正確的
所以現在懷疑是程式在處理 $body (撈回來的內文) 時產生了問題
是用PHP 的 implode()來處理的嗎,有人知道嗎??
倒底問題出在那,快昏了!!
另外,試過各種寄信方式,只要不經過 Drupal 的信都可以正確顯示!!
Re: 註冊信內文產生亂碼
搜尋看看user裡頭的_user_mail_text()
然後drupal_mail也看看
Re: 註冊信內文產生亂碼
對了,比對一下mail的原始碼是否有差異
用drupal寄出的和用其他寄出的同樣內容,原始碼是否有所差異
尤其是header
Re: 註冊信內文產生亂碼
比對過了,Header 的資訊都相同
實在是找不到還有什麼原因??
Re: 註冊信內文產生亂碼
我也跟你遇到一樣的問題 寫信問主機商也沒理我 :(
我個人測試過feedback module和contact
問題一樣是主旨中文正常 但是內文會是亂碼
檢查一下是UTF-8 encoding 硬被改成iso-8859-1的encoding
我也懷疑是 implode()的問題 因為$body內容會在mail之前經過他處理
改了php.ini裡的mbstring的所有選項還是不理我
該怎麼辦呢><
誰能給點靈感?
Re: 註冊信內文產生亂碼
所有收信的信箱都這樣嗎?
不是,那是該信箱的編碼問題
是,那就比較可能是smtp 設定的問題,不然就是php版本的問題
因為drupal用最單純的mail涵式來做
所以出問題比較容易跟php直接相關
問問主機商,smtp有沒有可以設定的?
Re: 註冊信內文產生亂碼
先感謝jimmy兄回應:)
為了找出問題花了好幾天,也在自己電腦上架設環境來測試
一切正常 但虛擬主機那邊send出來就是一切正常
只有中文的部份亂碼 整個搞的快瘋掉
初步判斷應該是主機商的問題 但直接找線上客服居然不理我直接斷線
先mail把我的問題呈上去 希望能有救
下面是我的環境跟暫時的解決方法:
主機商的php版本是 php 4.4.4 mbstring cjk都有支援
將mail函數改為mb_send_mail()
subject前處理的mime encode函式拿掉
這樣暫時解決了 此方法對feedback ,simple news leter模組都有用
有此鬼問題的各位請試試看吧~
Re: 註冊信內文產生亂碼
Jiroro 兄:
我向一個美國 web host 網站申請了一個網站,使用Drupal 5架了一個網站 http://hokafn.com/,結果也有同樣的問題。想要用你的方法來解決中文亂碼的問題,只是我看不太懂你的解決方法,可否稍微詳細描述一下檔案的位置,及如何修改,謝謝萬分。
Re: 註冊信內文產生亂碼
由於這些主機商都是外國人他們沒有考慮到cjk這些族群
因此我發生的問題是php->mail or sendmail(?)這段處理mail內文的字串時
utf-8的內文他會以iso-latin-1的編碼方式pass內文送出去
就是這樣才會造成亂碼 如果有同樣問題的朋友也可測測看是不是這段產生問題
找到問題點了 就來動手改吧我的是drupal 4.7
沒看過 5.0的 但應該差不多
到module下面找出user.module
進入程式碼找到
function user_mail()這段 drupal就是用他發送信件的
接著把裡面的return mail(bla bla bla);這段
改成下面這樣
return mb_send_mail(
$mail,
$subject,
str_replace("\r", '', $message),
"MIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-transfer-encoding: 8Bit\n" . $header
);
這樣就可以解決了 但只能治標不能治本 要是drupal更新你就得每次重改
所以還是要跟主機商爭取一下請他下次編譯時這些套件時加入utf8或cjk支援
希望這樣可以幫到各位需要的朋友們
Re: 註冊信內文產生亂碼
感謝 Jiroro 兄的快速回應,小弟在5.1版的 user.module 下找不到 function user_mail() 這段程式碼,我猜名稱可能已經改了,但實在找不到類似的名稱。真不知如何是好。
哪位大大的網站空間是在美國,用Drupal 5.1 架站,中文註冊信曾變成亂碼、而現在沒問題的人可以出來解救一下苦難同胞嗎?
Re: 註冊信內文產生亂碼
include/common.inc裡頭的function drupal_mail
http://api.drupal.org/api/HEAD/function/drupal_mail
Re: 註冊信內文產生亂碼
感謝 Jimmy 兄的指引,讓小弟成功利用 Jiroro 兄的方法寄出沒有亂碼的中文信。修改方法如下:
將include/common.inc裡頭的function drupal_mail 的
return mail(
$to,
mime_header_encode($subject),
str_replace("\r", '', $body),
join("\n", $mimeheaders)
);
改為
return mb_send_mail(
$to,
$subject,
str_replace("\r", '', $body),
join("\n", $mimeheaders)
);
終於可以成功寄出沒有亂碼的中文註冊信,真是太高興了。謝謝幾位熱心大哥的協助,小弟給諸位大哥行三鞠躬禮。
Re: 註冊信內文產生亂碼
這就是不屈不撓的精神啊!
Re: 註冊信內文產生亂碼
我的網站也遇到這個問題,就是寄出去的信都是亂碼...
本來也嘗試過 hokafn 的這個解法,結果連內文都被encode成 8bit編碼了...
最後想說自己換成 php-mailer,卻發現早就有 php-mailer的模組了...
在這裡: http://drupal.org/node/95819
安裝這個膜組織後,用SMTP來寄信就可以擺脫亂碼的窘境
特別回來 Drupal Taiwan分享一下
Re: 註冊信內文產生亂碼
這好,支援SSL,說不定就可以用Gmail來寄信了!