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

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


komura です。

On Thu, 03 Mar 2005 17:12:34 +0900
<kt_pierrot @ infoseek.jp> wrote:

> milk_coffee_2004jp @ yahoo.co.jp様の
> > --------------------------------------------------------
> > function convert($buffer) {
> >   return mb_convert_encoding($buffer,"SJIS","EUC-JP");
> > }
> > ob_start("convert");
> > --------------------------------------------------
> こちらの方法で試してみた所、うまく行きました!
> (プログラムの最後で「ob_end_flush()」も使用してみました)

この部分ですが、php.ini で以下のように設定されていた場合、
上記の処理を追加しなくても自動的に Shift JIS に変換されて
いたのではありませんか?

  output_handler = mb_output_handler
  mbstring.http_output = SJIS

もし、この設定を外して、ob_start() による出力制御で文字コードを
変換する場合、ob_start() は HTML を出力する前に入れる必要が
あります。

同じような機能を持つ関数として、mb_output_handler() があります
ので、出力文字コードを指定したいだけであれば、mb_output_handler()
を使用した方が簡単だと思います。こちらは条件によって HTTP ヘッダ
も追加してくれます。

  http://jp2.php.net/manual/ja/function.mb-output-handler.php


> 今回は、皆さんのレスを参考に
> 1、プログラム[EUC](ob_startを使い文字コードを一括変換⇒出力)
> 2、クエリーを受け取る場合は、mb_convert_encoding()で一旦文字列処理を行う
> の方法で行こうと思います。

php.ini で自動的に変換するように設定しているのであれば、1. を
同時に行うと二重に文字コード変換を行うことになり、文字化けの
原因になりますので、どちらか片方だけにしてください。

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


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