[PHP-users 17050]Re: mb_send_mail()と mb_encode_mimeheader()

Shuji TANAKA stanaka @ longpro.ne.jp
2003年 7月 30日 (水) 12:59:32 JST


stanakaです.

 いわきりさん,見るからに速そうなコード(笑)をどうもありがとうございました.やはり素人プログラミングとは違います.非常に勉強になり
ました.一度出した自分のものはどうにかして引っ込めたいですが,そういうわけにもいきません.
 勉強になった細かい点をいえば,

$a[] = $e;

 って,

array_push( $a, $e );

 と同じ意味を持つんですか?.知りませんでした.精進します.



 ただ,一箇所気になった点がありました.parse_euc_ascii()の中,

  if (substr($string, 0 , 1) < "\x7f") {
    list($ret, $string, $c) = preg_split("/([\x80-\xff])/", $string, 2, PREG_SPLIT_DELIM_CAPTURE);

    // 省略

  }
  } else {
    list($ret, $string, $c) = preg_split("/([\x01-\x7f])/", $string, 2, PREG_SPLIT_DELIM_CAPTURE);

    // 省略,

  }

 それぞれのpreg_split()で,ASCIIの連続とEUCの連続を切り出しているものと思われます,経験上,Bエンコードされた文字列の間にあるスペー
スと行セパレータの連続は,無視されるのではないかと思うのですが,これだとEUC文字列の連続の後に来るスペースがASCIIとして検出されてしま
い(当然といえば当然ですが),スペース(またはスペースの連続)部分がエンコードされずに残ってしまいます.その後に続く文字列がASCIIで
あれば問題ないのですが,もう一度EUC文字列が続いたりすると,スペース部分がデコード時に消えてしまうように思います.

 parse_euc_ascii()という関数名からして,この関数の中で対処するべきことではなく,呼び出し側で対処するべきことかもしれませんが,とり
あえずEUC文字列の連続の切り出しのところで,以下のような形はどうでしょうか?.

    list( $ret, $string, $c ) = preg_split( "/([\x01-\x1f\21-\x7f])/", $string, 2, PREG_SPLIT_DELIM_CAPTURE );

 ・・・単純にスペースを避けただけで,恥ずかしい限りの方法ですが・・・.しかしとにかく一つだけでも考えて出しておかないと,粗探しするだけの
嫌な奴になってしまいますので(笑),申し訳ありません.

 それでは失礼致します.





PHP-users メーリングリストの案内