2010-01-24 178 views
3

當通過PHP請求發送郵件時,俄語信件發生了什麼?例如? 的 「硬編碼」 俄羅斯字母正常顯示,但是從窗體的textboxex象形文字:PHP和俄羅斯信件

HTML頁面:

<tr> 
<td style="width: 280px">Содержание работ</td> 
<td><input type="text" id="workContent"/></td> 
</tr> 

PHP頁面:

$WorkContent = $_REQUEST["workContent"]; //Содержание работ 
// ... 
$WorkContentLabel = "Содержание работ"; 
// ... 
$message .= $WorkContentLabel . ":\t" . $WorkContent . "\n"; 
// ... 
// email stuff (data below changed) 
$to = "[email protected]"; 
$from = "[email protected]"; 
$from_header = "From: Russian site command "; 

$subject = "Message with russian letters"; 
$subject = '=?utf-8?B?'.$subject.'?='; 
$message .= $subject; 

// send message 
mail($to, $subject, $message, $from_header); 

用戶在文本框中輸入一些內容: alt text http://lh3.ggpht.com/_1TPOP7DzY1E/S1y6Y0wb9tI/AAAAAAAAC88/OkdMQkO47HQ/s800/works.png

並提交表格。

我怎麼接受(在Gmail中):

Содержание работ:  1)Содержание 2)RABOT 

所以,硬編碼俄文本 - OK,通過形式俄文本發送 - NOK,由發表格ASCII文本 - 確定。

有人知道什麼可能是編碼的奇怪行爲的原因?

編輯: 使用

$subject = " оборудования - subject with russian letters"; 
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; 
$message .= $subject; 

獲得像 ÿ - subject with russian letters http://lh6.ggpht.com/_1TPOP7DzY1E/S1zFqFe9ohI/AAAAAAAAC9E/PZ7C4JtEHTU/s800/subject.png

回答

8

您需要base64_encode()$subject,像這樣:

$subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; 

確保您還保存.php文件編碼爲UTF-8沒有BOM


這個問題也是你可能感興趣的:Is this the correct way to send email with PHP?

+0

用'$ subject ='=?UTF-8?B?將PHP文檔保存爲UTF-8。 。 base64_encode($ subject)。 '?=';'現在一切正常! 非常感謝! – serhio 2010-01-24 22:19:09

3

主題檢查編碼:

  1. HTML編碼(以<meta http-equiv..>標籤)
  2. PHP/HTML /模板文件編碼g(編輯器將文件保存在什麼編碼中)
  3. 數據庫編碼(如果適用)(在表中數據的編碼方式)
  4. 數據庫連接編碼(如果適用)(數據庫連接使用哪種編碼)

並使用UTF-8處理所有事情。

+0

不要忘記電子郵件標題。 – 2010-01-24 21:29:06

+0

你也應該在PHP腳本中加入這一行:header('content-type:text/html; charset:utf-8'); – techexpert 2011-10-05 08:23:16

1

以及什麼阿利克斯說,大約在主題行中的RFC2047編碼字的base64,你還需要告訴郵件期待UTF -8編碼的文本在郵件正文中,通過添加標題:

MIME-Version: 1.0 
Content-Type: text/plain;charset=utf-8 

否則這是由郵件猜測,可能是錯誤的。

+0

郵件正文,你的意思是'$ message'?我怎樣才能添加這個頭文件? – serhio 2010-01-25 09:09:20

+0

是的,'$ message'在主體中。您可以使用'additional_headers'參數添加標題,就像您設置'From:'一樣。例如。 '$ headers =「From:Russian site command \ r \ nMIME-Version:1.0 \ r \ nContent-Type:text/plain; charset = utf-8」'。 – bobince 2010-01-25 10:35:56