[PHP-users 3038] Re: SJIS->EUC bug ?

Yoshio Funaki php-users@php.gr.jp
Tue, 23 Oct 2001 09:18:21 +0900


船木@秋田県立図書館です。1ヶ月もたってから、またthread起こすのは
気が引けるんですが、とりあえず検証してみた結果、どうもPHP4.0.6の
mbstring周りが原因なような気がするので、再度お伺いいたします。
1)内容
POSTで箱、柊などEUCの最後がA2である文字を1文字だけ渡そうとすると
化けてわたってくる。
2文字(たとえば「木箱」とか「箱物」)とすると正常にわたってくる

2)処理内容は以下の通りです。
>とりあえず、SQL生成部の問題もあろうかと思いまして、
>PHPのSQL生成部の関数をお知らせします。
>
>function query_data($sw,$data)
>{
>        switch($sw) {
>                case "S":
>                        $QE="'".$data."%'";
>                        break;
>                case "M":
>                        $QE="'%".$data."%'";
>                        break;
>                case "E":
>                        $QE="'%".$data."'";
>                        break;
>        }
>        return($QE);
>}
>ごらんの通り、$swで前方一致、部分一致、後方一致をみて
>SQLのqueryをつくってるだけです。

3)検証
同じPHP scriptを用いて検証してみました。
1.apache1.3.12+PPH4.0.3pl1+塚田さん謹製jstring module
 文字化けせずちゃんとPOSTでわたってきます
2.apache1.3.20+PHP4.0.6(mbstring)
 箱、柊等EUCの最後がA2以外の物は正常にわたってきます。

ちなみにcomile optionはこんな感じです(phpinfo()からはりつけ)
'./configure' '--enable-mbstring' '--enable-mbstr-enc-trans' 
'--with-pgsql' '--enable-track-vars' '--with-apxs=/usr/local/apache/bin/apxs'
'--enable-trans-sid' '--without-mysql'

さらにphp.iniの該当部分はこんなです
; for japanese encoding
;jstring.default_encoding = EUC_JP <= for 4.0.5 or under
; for 4.0.6 or higher
; for auto translate,disable buffering
output_buffering = Off
default_charset = EUC-JP
;
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.detect_order = EUC-JP,eucJP-win,SJIS,SJIS-win,JIS,ISO-2022-JP,ASCII
;
mbstring.substitute_character = none

# ちなみにmbstring.detect_order = autoもためしてますが
# だめでした

jstring moduleとmbstringを比較すればよいのでしょうが
そこまで力ありません。;_;
識者の方、何かご教示いただけませんでしょうか。
よろしくお願いいたします。 m(_ _)m
# 変わったのはmbstr-enc-transだけ・・・・
# このoptionはずしたら動き出したりして!? <-- 冗談です ^^;

秋田県立図書館 船木 喜夫 yoshio@apl.pref.akita.jp

----
Yoshio Funaki  yoshio@apl.pref.akita.jp