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

Yoshio Funaki php-users@php.gr.jp
Wed, 24 Oct 2001 09:19:09 +0900


船木@秋田県立図書館です。
>こんにちは、塚田と申します。
jstring module大変便利に使わせていただきました。
PHP4.0.6以前は、塚田さんのjstring moduleを待ってver upするという
状態でした。 m(_ _)m

閑話休題
>> 1)内容
>> POSTで箱、柊などEUCの最後がA2である文字を1文字だけ渡そうとすると
>> 化けてわたってくる。
>> 2文字(たとえば「木箱」とか「箱物」)とすると正常にわたってくる
>> 
>> 2)処理内容は以下の通りです。
> ・・・
>> 
>> 3)検証
>> 同じPHP scriptを用いて検証してみました。
>> 1.apache1.3.12+PPH4.0.3pl1+塚田さん謹製jstring module
>>  文字化けせずちゃんとPOSTでわたってきます
>> 2.apache1.3.20+PHP4.0.6(mbstring)
>>  箱、柊等EUCの最後がA2以外の物は正常にわたってきます。
>
>文字コードの判定と、文字コードの変換のどちらが
>怪しそうなんでしょうか?
>
>  echo mb_http_input();
>
>とすると、判定結果が表示されますが、
>どうなりますか?
>
>ちなみに、HTTP入力の文字コード判定には
> mbstring.detect_order は関係ありません。
>順番を指定するには、
>
> mbstring.http_input = JIS,EUC-JP,SJIS
>
>のように記述します。
>
このthreadにもreplyつけていただいている大垣さんからご教示いただきまして
以下のような形で一応解決を見ました。

PHP4.0.3pl1+jstring moduleとPHP4.0.6 with mbstringでは、文字コード判定
ルーチンに変更があり、挙動が変わっているため、同じスクリプトでも
文字化けが発生する可能性がある。
文字コード判定ミスに関してはPHP4.0.3pl1+jstring moduleでも起こりうるので
文字コード判定を助けるため<FORM 〜>と</FORM>の間に、たとえば
<input type="hidden" value="日本語判定用文字列">等を埋め込むとよい。
文字列は、判定を助けるために十分な長さの物を指定した方がよいようだ。

と言うことになります。FAQだと思うのですが、とりあえず。 m(_ _)m

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

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