php-i18n Digest 24 Mar 2008 12:38:33 -0000 Issue 385
Topics (messages 1157 through 1158):
Re: Problems with mime encoding of Japanese Characters in Subject and 'From:'
etc. fields.
1157 by: Dietrich Bollmann
1158 by: Tomas Kuliavas
Administrivia:
To subscribe to the digest, e-mail:
[EMAIL PROTECTED]
To unsubscribe from the digest, e-mail:
[EMAIL PROTECTED]
To post to the list, e-mail:
[EMAIL PROTECTED]
----------------------------------------------------------------------
--- Begin Message ---
A reply to myself:
Here a little example program with the described the problem
and the code I am using...
Thanks, Dietrich
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;
charset=UTF-8" />
<title>Contact Me</title>
</head>
<body>
<h1>かな漢字</h1>
<?php # Script 10.1 - email.php
function sendEmail($recipientEmailAddress, $subject, $body, $senderName,
$senderEmailAddress) {
// set current language to Japanese
mb_language("ja");
// encode subject
// - first using JIS (ISO-2022-JP)
// - after encoding the resulting JIS string with the MIME header
encoding scheme
$subjectJIS = mb_convert_encoding($subject, "ISO-2022-JP", "AUTO");
$subjectMIME = mb_encode_mimeheader($subjectJIS, "ISO-2022-JP",
"B");
// encode the name of the sender
// - first using JIS (ISO-2022-JP)
// - after encoding the resulting JIS string with the MIME header
encoding scheme
$senderNameJIS = mb_convert_encoding($senderName, "ISO-2022-JP",
"AUTO");
$senderNameMIME = mb_encode_mimeheader($senderNameJIS,
"ISO-2022-JP", "B");
// encode body
// - using JIS (ISO-2022-JP)
// - the used coding system had to be specified in the
Content-Type/charset header:
// Content-Type: text/plain; charset=ISO-2022-JP
$bodyJIS = mb_convert_encoding($body, "ISO-2022-JP", "AUTO");
// formatting the sender string
$senderMIME = sprintf("%s <%s>", $senderNameMIME,
$senderEmailAddress);
// formatting the mime header
$headers = "MIME-Version: 1.0\n" ;
$headers .= sprintf("From: %s\n", $senderMIME);
$headers .= sprintf("Reply-To: %s\n", $senderMIME);
$headers .= "Content-Type: text/plain; charset=ISO-2022-JP\n";
// send encoded mail
$result = mail($recipientEmailAddress, $subjectMIME, $bodyJIS,
$headers);
// return result
return $result;
}
$to = "[EMAIL PROTECTED]";
$subject = "かな漢字かな漢字かな漢字かな漢字かな漢字かな漢字
かな漢字かな漢字かな漢字かな漢字";
$body = "かな漢字かな漢字かな漢字かな漢字かな漢字かな漢字
かな漢字かな漢字かな漢字かな漢字";
$senderName = "かな漢字かな漢字かな漢字かな漢字かな漢字かな漢字
かな漢字かな漢字かな漢字かな漢字";
$senderEmailAddress = "[EMAIL PROTECTED]";
// send the email
sendEmail($to, $subject, $body, $senderName, $senderEmailAddress);
?>
</body>
</html>
On Thu, 2008-03-20 at 03:33 +0900, Dietrich Bollmann wrote:
> Hi,
>
> I try to send messages written in Japanese (Kana/Kanji) with php.
>
> Everything works fine - only when the subject (or the name of the
> sender) becomes longer, there seems to be something wrong with the
> encoding: Neither my nor the mail reader of other Japanese friends is
> able to decode the mime string. At the place of the Japanese
> Characters, the mime string itself is displayed.
>
> As this doesn't happen for other Japanese emails with even long
> subjects, I suppose I did something wrong...
>
> When using the corresponding php mb_* functions to decode the string
> back, sometimes the correct original string and sometimes meaningless
> characters are shown.
>
> Here how I convert the subject (the name is converted using the same
> method and the sources are saved in UTF-8 using emacs):
>
> $subjectJIS = mb_convert_encoding($subject, "ISO-2022-JP", "AUTO");
> $subjectMIME = mb_encode_mimeheader($subjectJIS, "ISO-2022-JP", "B");
> ...snip...
> mail($to, $subjectMIME, $bodyJIS, $headers);
>
> Here part of the message as it is displayed by my mail program:
>
> From:
> =?ISO-2022-JP?B?GyRCJCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7?==?ISO-2022-JP?B?eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3ob?=(B
> <[EMAIL PROTECTED]>
> ...snip...
> Subject:
> =?ISO-2022-JP?B?GyRCJCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7?=
> =?ISO-2022-JP?B?eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3ob?= (B
> ...snip...
>
> かな漢字かな漢字かな漢字かな漢字かな漢字かな漢字かな漢字かな漢字かな漢
> 字かな漢字
>
> And here part of the mail text itself:
>
> ...snip...
> Subject:
>
> =?ISO-2022-JP?B?GyRCJCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7?=
>
> =?ISO-2022-JP?B?eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3ob?=
> =?ISO-2022-JP?B?KEI=?=
> MIME-Version: 1.0
> From:
> =?ISO-2022-JP?B?GyRCJCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7?=
> =?ISO-2022-JP?B?eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3ob?=
> =?ISO-2022-JP?B?KEI=?= <[EMAIL PROTECTED]>
> ...snip...
> Content-Type: text/plain; charset=ISO-2022-JP
> ...snip...
>
> かな漢字かな漢字かな漢字かな漢字かな漢字かな漢字かな漢字かな漢字かな漢
> 字かな漢字
>
> Here a part of another (spam) mail which is correctly displayed by my
> mail program:
>
> MIME-Version: 1.0
> Subject:
> =?ISO-2022-JP?B?GyRCIXolXSUkJXMlSBsoQjEwGyRCR1whdUF3TkEbKEI=?=
> =?ISO-2022-JP?B?GyRCTDVOQSF6GyhCMSwwMDAbJEIxXyU4JWUbKEI=?=
> =?ISO-2022-JP?B?GyRCJSglaiE8Qmc9ODlnISohWjNaRTchWxsoQg==?=
> =?ISO-2022-JP?B?GyRCIUobKEIyMDA4LzAzLzE5?= =?ISO-2022-JP?B?KQ==?=
> From: =?ISO-2022-JP?B?GyRCM1pFNztUPmwlOCVlJSglaiE8ISYlIhsoQg==?=
> =?ISO-2022-JP?B?GyRCJS8lOyU1JWohPCVLJWUhPCU5GyhC?=
> <[EMAIL PROTECTED]>
>
> Displayed as:
>
> From: 楽天市場ジュエリー・アクセサリーニュース
> <[EMAIL PROTECTED]>
> ...snip...
> Subject: ★ポイント10倍&送料無料★1,000円ジュエリー大集合!【楽天】
> (2008/03/19)
>
> If anybody can explain me the problem I would be most gratefull :)
>
> Thanks, Dietrich
>
>
>
>
--- End Message ---
--- Begin Message ---
> Hi,
>
> I try to send messages written in Japanese (Kana/Kanji) with php.
>
> Everything works fine - only when the subject (or the name of the
> sender) becomes longer, there seems to be something wrong with the
> encoding: Neither my nor the mail reader of other Japanese friends is
> able to decode the mime string. At the place of the Japanese
> Characters, the mime string itself is displayed.
>
> As this doesn't happen for other Japanese emails with even long
> subjects, I suppose I did something wrong...
>
> When using the corresponding php mb_* functions to decode the string
> back, sometimes the correct original string and sometimes meaningless
> characters are shown.
>
> Here how I convert the subject (the name is converted using the same
> method and the sources are saved in UTF-8 using emacs):
>
> $subjectJIS = mb_convert_encoding($subject, "ISO-2022-JP", "AUTO");
> $subjectMIME = mb_encode_mimeheader($subjectJIS, "ISO-2022-JP", "B");
> ...snip...
> mail($to, $subjectMIME, $bodyJIS, $headers);
>
> Here part of the message as it is displayed by my mail program:
>
> From:
> =?ISO-2022-JP?B?GyRCJCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7?==?ISO-2022-JP?B?eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3ob?=(B
> <[EMAIL PROTECTED]>
> ...snip...
> Subject:
> =?ISO-2022-JP?B?GyRCJCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7?=
> =?ISO-2022-JP?B?eiQrJEo0QTt6JCskSjRBO3okKyRKNEE7eiQrJEo0QTt6JCskSjRBO3ob?= (B
...
> If anybody can explain me the problem I would be most gratefull :)
You forgot to mention your PHP version, configure options related to
mbstring and php mbstring configuration.
Could you explain why Japanese are so obsessed with ISO-2022-JP? Why
can't you just send it in Base64 encoded UTF-8?
--
Tomas
--- End Message ---