[PHP-users 11557] Re: ms-拡張領域の文字をphpからSQLserver(NT)へinsertしたい

Moriyoshi Koizumi php-users@php.gr.jp
Tue, 19 Nov 2002 09:01:50 +0900


小泉です。

後で確認したところ、いくつか事実誤認がありましたので訂正します。

> > 現状のものだと第三水準の一部は大丈夫なようですが、
> > IBM / NEC 拡張領域の文字は正しく扱えないはずですので。

これは大丈夫でした。すみません。
mbstring は SJIS-WIN の指定をすれば、きちんと拡張領域の文字も
扱えます。

> 
> 以下で試しましたが、古い徳の字(SJIS-win:FABA, unicode:5FB7)が
> 「@」になってしまう現象は、前メールの状況と同じでした。
> # 受取ったpostデータをそのままクライアントに表示させて確認しています。
> # IEの[表示]-[エンコード]は[自動選択-シフトjis]になっています。
> # 一緒にくる他のpostデータの漢字は正常に表示されます。
> 
> ■php.ini(#2)
> mbstring.internal_encoding    = Shift-JIS
> mbstring.http_input           = pass
> mbstring.http_output          = SJIS-win
> mbstring.detect_order         = auto
> mbstring.substitute_character = pass
> mbstring.script_encoding      = Shift-JIS

おそらく、

mbstring.internal_encoding = Shift_JIS を、
mbstring.internal_encoding = SJIS-win に変えてやる必要があります。

ちょっとややこしいですが、
出力フィルタで、"Shift_JIS" => "SJIS-win" に変換しようとして、
"Shift_JIS" にない文字があったので置換されてしまったのでしょう。