[PHP-users 24763] Re: Postgres[EUC-JP]にアクセスする場合

komura komura @ ma9.seikyou.ne.jp
2005年 3月 3日 (木) 02:27:51 JST


komura です。

On Wed, 02 Mar 2005 19:46:03 +0900
<kt_pierrot @ infoseek.jp> wrote:

> 及川と申します。
> 
> PHP+Postgres で携帯用コンテンツのサイトを作成する事になりました。
> 既存のソースコードがありそれを使用しなければいけないのですが、
> 既存のソースはEUCで書かれています。
> 携帯なのでS-JISで出力しなければいけないので、
> php.iniに
> 
> output_buffering = On
> output_handler = mb_output_handler
> default_mimetype = "text/html"
> default_charset = "Shift_JIS"
> mbstring.internal_encoding = EUC-JP
> mbstring.http_input = SJIS
> mbstring.http_output = SJIS
> mbstring.detect_order = auto
> mbstring.substitute_character = none;
> 
> 以上の設定を行ったのですが
> DBにINSERT/UPDATEする際にも文字がSJISで記録されるようになってしまいました。

この設定では POST または GET の変数の文字コードは変換されませんので、
データベースには SJIS で登録されることになると思います。

受け取りの変数の文字コードが SJIS であることが確実なのであれば、
mb_convert_variables() や mb_convert_encoding() で SJIS を EUC-JP に
変換すればデータベースには EUC-JP で登録されるようになります。

自動的に mbstring.internal_encoding で設定した EUC-JP に変換したい
のであれば、mbstring.encoding_translation = On と設定する必要が
あります。

ただ、mbstring.encoding_translation = On にした場合、文字コード検出
に失敗する可能性がありますし、また、バグも報告されていますので、
あまり使用しない方が良いと思います。


> INSERT/UPDATEする前に SET CLIENT_ENCODING TO 'sjis' を行うと
> UPDATE/INSERT はうまくいくのですが、
> SELECT時文字化けした文字が返ってきてしまいます。
> 
> このようなPHP[ソース⇒EUC_JP/出力⇒SJIS]+Postgres[EUC]でサイトを作成したい場合どのような設定にするのが一般的なのでしょうか?

php.ini などの設定で対応することもできますし、PHP スクリプトのみ
で対応することも可能です。
いろいろな方法が考えられますので、どのような方法が一般的なのかは
知りませんが、どの時点でどの文字コードになっているのかを正しく
把握していれば、状況や環境に応じて対応できます。

-- 
komura <komura @ ma9.seikyou.ne.jp>


PHP-users メーリングリストの案内