开发者

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:

  1. HTML encoding (in the <meta http-equiv..> tag)
  2. PHP/HTML/template file encoding (what encoding your editor saves the file in)
  3. Database encoding (if applicable) (in what encoding the data in the tables is in)
  4. 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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜