通过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 = "test@gmail.com";
$from = "me@domain.com";
$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
所以,硬编码俄语文本 - 好的,通过表单发送俄语文本 - NOK ,由表单发送ASCII 文本 - 确定。
有人知道编码时这种奇怪行为的原因是什么?
编辑: 使用
$subject = " оборудования - subject with russian letters";
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
$message .= $subject;
答案 0 :(得分:9)
您需要base64_encode()
$subject
,如下所示:
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
确保您还将 .php
文件保存为UTF-8编号为无BOM 。
您可能也会对此问题感兴趣:Is this the correct way to send email with PHP?
答案 1 :(得分:3)
检查您的编码:
<meta http-equiv..>
标记中)并将UTF-8用于所有内容。
答案 2 :(得分:1)
除了Alix所说的关于主题行中RFC2047编码字中的base64的内容之外,您还需要告诉邮件程序通过添加标题来预期邮件正文中的UTF-8编码文本:
MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8
否则由邮寄者猜测,可能是错误的。