#36140 [Opn->Asn]: mb_encode_mimeheader not working properly

From: Date: Mon, 10 Apr 2006 13:07:10 +0000
Subject: #36140 [Opn->Asn]: mb_encode_mimeheader not working properly
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-95541@lists.php.net to get a copy of this message
 ID:               36140
 Updated by:       sniper@php.net
 Reported By:      sugan_b at yahoo dot co dot in
-Status:           Open
+Status:           Assigned
 Bug Type:         mbstring related
 Operating System: FC3
 PHP Version:      5.1.2
 Assigned To:      hirokawa
 New Comment:

Rui, this might be good candidate for fixing. :)


Previous Comments:
------------------------------------------------------------------------

[2006-02-17 11:15:42] sugan_b at yahoo dot co dot in

Sorry for the late response.
This is my understanding. Please correct me if i am wrong.
The mb_encode_mimeheader function is doing base64 encoding process in
mbfilter.c. base64 encoding encodes from the front by each 3bytes of
the object character and if the
length of character has no more 3bytes, it converts the rest 1 or 2
bytes into "=", value "0x3d". mb_encode_mimeheader is actually doing
this process but According to RFC2047, A long
word exceeds 75bytes should be expressed by multiple lines. 
mb_encode_mimeheader does not care about this line separating action
and thus the bit value of encoded character is misencoded and sent to
mail receiver incorrectly.

I think that is the reason for  the subject value to get garbled.

------------------------------------------------------------------------

[2006-02-06 15:09:18] hirokawa@php.net

Could you please check it by the simpler script ?

php.ini:
 mbstring.language = Japanese
 mbstring.internal_encoding = EUC-JP

sample.php:
<?php
$subject ="some euc-jp encoded japanese string.";
$encoded= mb_convert_encoding($subject, "ISO-2022-JP", "EUC-JP");
$sub_mime = mb_encode_mimeheader($encoded, "ISO-2022-JP", "B","\r\n");
echo $sub_mime;
?>
It works well or  not ?
If the result is a correct MIME encoded string, 
mb_encode_mimeheader() work fine.


------------------------------------------------------------------------

[2006-01-25 10:58:04] sniper@php.net

Rui, can you check this out please?

------------------------------------------------------------------------

[2006-01-24 12:18:54] sugan_b at yahoo dot co dot in

The actual result obtained is:
&#12304;&#21839;&#21512;&#12305;
&#12513;&#12540;&#12523;&#12398;Subject&#12364;8;z2=$1$7$F$7$^$$$^$9

------------------------------------------------------------------------

[2006-01-24 12:15:12] sugan_b at yahoo dot co dot in

Description:
------------
 A small part of my application(using only PHP 5.1.2 and Apache 2.2.0)
incorporates mailing functionality which uses
"mb_encode_mimeheader()".I am using ISO-2202-JP charset but Multibyte
characters written in ISO-2202-JP charset code are not sent to the 
receiver correctly.



Reproduce code:
---------------
index.php

<!-- Start of index.php file -->
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=EUC-JP">
<title>test</title> </head> <body> <form method="POST"
action="send.php">
To¡§<input type="text" name="to" size="32"
maxlength="128"
value="sugan_b@yahoo.co.in"/><br>
Subject¡§<input type="text" name="subject" size="128"
maxlength="12	8"
value="¡ÚÌä¹ç¡Û
¥á¡¼¥ë¤ÎSubject¤¬Ê¸»ú²½¤±¤·¤Æ¤·¤Þ¤¤¤Þ¤¹"/><br>
<br>
<input type="submit" value="send" /> </form> </body>
</html>
<!-- End of index.php file -->


send.php:

<!-- Start of send.php file -->
<?php
function mailSend($from, $to, $subject, $message) {
    $encoded= mb_convert_encoding($subject, "ISO-2022-JP", "EUC-JP");
    $sub_mime = mb_encode_mimeheader($encoded, "ISO-2022-JP", "B",
"\r\n");

    $body = mb_convert_encoding($message, "ISO-2022-JP", "EUC-JP");

    $mp = popen("/usr/sbin/sendmail -f $from $to", "w");
    fputs($mp, "Content-Transfer-Encoding: 7bit\r\n");
    fputs($mp, "From: ".$from."\r\n");
    fputs($mp, "To: ".$to."\r\n");
    fputs($mp, "Subject: ".$sub_mime."\r\n");
    fputs($mp, "MIME-Version: 1.0\r\n");
    fputs($mp, "X-Mailer: test php\r\n");
    fputs($mp, "Content-Type: text/plain; charset=\"iso-2022-jp\"");
    fputs($mp, "\r\n");
    fputs($mp, "$body\r\n");
    pclose($mp);
}

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=EUC-JP">
</head>
<body>
<?php
  $from = "sugan_b@yahoo.co.in";
  $subject = $_POST['subject'];
  $to = $_POST['to'];
  $message =
"¿·µ¬Åê¹Æ¤¬¤¢¤Ã¤¿¤³¤È¤ò¤ªÃΤ餻¤·¤Þ¤¹¡£\r\n";
  mailSend($from, $to, $subject, $message); ?>
Mail Sending has Completed.
</body>
</html>
<!-- End of send.php file -->

Actual result:
--------------
Actual Result:
The value of Subject field :
 &#21839;&#21512;&#12305;
&#12513;&#12540;&#12523;&#12398;Subject&#12364;8;z2=$1$7$F$7$^$$$^$9


I have configured php using --enable-mbstring=all option.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=36140&edit=1


Thread (10 messages)

« previous php.bugs (#95541) next »