[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 メーリングリストの案内