• 締切済み

データベースから取り出した日本語が化けるのですが

PHP初心者です。 データベースから取り出した日本語が化けるのでなにか直す方法は無いものかと悩んでおります。今のところアルファベット、数字は問題ありません。 構成はこんなかんじです。 Linux : Vine 2.5 PHP : PHP-4.2.1 DB : Postgresql-7.2 apache 1.3.26 現象: クライアントPCからwebでデータベースに日本語入力は出来ます。 データベースにターミナルから直接入り(psql [DB名])、(select * from [テーブル名];)で確認すると問題無く登録した通りに入っています。 クライアントPCからwebでデータベースの検索をして 拾い出したデータをクライアントPCのweb上で表示をすると文字化けし、 登録した文字とはほどとおいものが出て来ます。 "あ"と登録すると $$ などと出て来ます。 なにかいい方法がありましたら、教えて下さい。

みんなの回答

  • maro
  • ベストアンサー率47% (95/199)
回答No.6

PostgreSQLはパッケージでインストールしたものですか?それともご自身でソースからインストールしたものですか? ご自身でソースからインストールしたものとすればコンパイル時に「--enable-multibyte=EUC_JP」のオプションはつけましたか? データベースに格納されているの文字コードと、http出力されている文字の文字コードが違っているのではないかと思います。 <? phpinfo() ?>と書いたPHPファイルをサーバーにアップしてブラウザで見てください。インストールされているPHPの情報が表示されます。その中で「mbstring」の部分はどうなっていますか? うちのは「mbstring.internal_encoding」がEUC_JP、「mbstring.http_output」がSJISになっています。 もし意図する内容と違っていたら、php.iniの内容を確認してください。うちのサーバーは以下のようになっています。 output_buffering = On output_handler = mb_output_handler mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.detect_order = auto mbstring.substitute_character = none そもそも「mbstring」関連の設定項目がない、となると、PHPをコンパイルからやり直さないとだめです。

すると、全ての回答が全文表示されます。
  • imasyu
  • ベストアンサー率36% (19/52)
回答No.5

ごめんなさい下の解答間違ってました。 $mb_convert_encoding("$mozi","SJIS");          ↓ mb_convert_encoding("$mozi","SJIS"); です。 ちなみにSJISのところをかえればいろいろな文字コードにかえれるようです。

すると、全ての回答が全文表示されます。
  • imasyu
  • ベストアンサー率36% (19/52)
回答No.4

データベースから参照した値が $mozi = "あいうえお"; だとするとPHPの関数 $mb_convert_encoding("$mozi","SJIS"); で文字コードをSJISに変更できたような

すると、全ての回答が全文表示されます。
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.3

> ということはLinux上でファイルのエンコードを変える > (nkfで変更)ということでしょうか?クライアント側の > web画面でエンコードを”EUC"に変えるということでしょうか? どちらでもOKです。

すると、全ての回答が全文表示されます。
回答No.2

こんにちは。 DBのエンコードが、EUC-JPで、HTMLファイルのエンコードが、Shift-JISになっていると、WEB上で見る際に文字化けをおこす場合があります。 私も以前、これで悩んだことがありました(^ ^;) HTMLファイルをEUC-JPに変更してあげると、ちゃんと表示できるかと思います。

g_putti
質問者

お礼

回答ありがとうございます。 さらにお聞きしたいのですが、”HTMLファイルをEUC-JPに変更してあげると、ちゃんと表示できるかと思います。”ということはLinux上でファイルのエンコードを変える(nkfで変更)ということでしょうか?クライアント側のweb画面でエンコードを”EUC"に変えるということでしょうか?他の方法があるのですか?まだまだ、踏み込んでないところがあるような気がします。 またよろしくお願いします。

すると、全ての回答が全文表示されます。
  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

多分、internal_encodingとhttp_outputの問題でしょう。 php4のmbstring関連を参考にして、正しい設定をしてみて下さい。

参考URL:
http://jp2.php.net/manual/ja/ref.mbstring.php
g_putti
質問者

お礼

レスが遅れてすいません。回答ありがとうございます。 設定はなんどとなく確認し、いろいろ変更したりしておりますが、こちらの求める答えが返ってきません。apache、postgreSQLで設定があるのかな?と思い始めた今日この頃です。

すると、全ての回答が全文表示されます。

関連するQ&A