PHP and Russian Letters
What is happening with Russian letters when sending via PHP request to ... a mail, by e.g.? the "hardcoded" russians letters are displayed properly, but from the Form's textboxex with hieroglyphs:
HTML page:
<tr>
<td style="width: 280px">Содержание работ</td>
<td><input type="text" id="workContent"/></td>
</tr>
PHP page:
$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);
User enter some content in the textbox: alt text http://lh3.ggpht.com/_1TPOP7DzY1E/S1y6Y0wb9tI/AAAAAAAAC88/OkdMQkO47HQ/s800/works.png
and the submits the 开发者_StackOverflowform.
What do I receive (in GMAIL):
Содержание работ: 1)Содержание 2)RABOT
So, hard-coded Russian text - OK, sent by the form Russian text - NOK, sent by the form ASCII text - OK.
Does somebody know what could be the cause of that strange behavior with the encoding?
EDIT: used
$subject = " оборудования - subject with russian letters";
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
$message .= $subject;
obtains a subject like �����������ÿ - subject with russian letters http://lh6.ggpht.com/_1TPOP7DzY1E/S1zFqFe9ohI/AAAAAAAAC9E/PZ7C4JtEHTU/s800/subject.png
You need to base64_encode()
your $subject
, like this:
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
Make sure you're also saving your .php
file encoded as UTF-8 no BOM.
This question might also interest you: Is this the correct way to send email with PHP?
Check your encodings:
- HTML encoding (in the
<meta http-equiv..>
tag) - PHP/HTML/template file encoding (what encoding your editor saves the file in)
- Database encoding (if applicable) (in what encoding the data in the tables is in)
- Database connection encoding (if applicable) (what encoding is used for database connections)
and use UTF-8 for everything.
As well as what Alix said about base64 in the RFC2047 encoded-word in your Subject line, you also need to tell the mailer to expect UTF-8-encoded text in the body of the mail, by adding headers:
MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8
otherwise it's up to the mailer to guess, probably wrongly.
精彩评论