[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