PHP和俄罗斯字母

ser*_*hio 3 php ascii utf-8 internationalization character-encoding

当通过PHP请求发送邮件时,俄语字母发生了什么?"硬编码"俄罗斯字母正确显示,但从表格的文本框中带有象形文字:

HTML页面:

<tr>
 <td style="width: 280px">?????????? ?????</td>
 <td><input type="text" id="workContent"/></td>
</tr>
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

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

并提交表格.

我收到什么(在GMAIL中):

?????????? ?????:       1)???????µ???¶?°?????µ 2)RABOT
Run Code Online (Sandbox Code Playgroud)

所以,硬编码的俄语文本 - 好的,通过表格发送俄语文本 - NOK,通过ASCII文本格式发送- 确定.

有人知道编码的奇怪行为可能是什么原因?

编辑:使用

$subject = "  ????????????  - subject with russian letters";
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
$message .= $subject;
Run Code Online (Sandbox Code Playgroud)

获得像 ÿ这样的主题- 俄语字母http://lh6.ggpht.com/_1TPOP7DzY1E/S1zFqFe9ohI/AAAAAAAAC9E/PZ7C4JtEHTU/s800/subject.png

Ali*_*xel 9

你需要base64_encode()你的$subject,像这样:

$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
Run Code Online (Sandbox Code Playgroud)

确保您还将.php编码为UTF-8的文件保存为无BOM.


这个问题也可能让您感兴趣:这是用PHP发送电子邮件的正确方法吗?