プロが教える店舗&オフィスのセキュリティ対策術

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上で表示をすると文字化けし、
登録した文字とはほどとおいものが出て来ます。
"あ"と登録すると $$ などと出て来ます。

なにかいい方法がありましたら、教えて下さい。

A 回答 (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をコンパイルからやり直さないとだめです。
    • good
    • 0

ごめんなさい下の解答間違ってました。



$mb_convert_encoding("$mozi","SJIS");
         ↓
mb_convert_encoding("$mozi","SJIS");
です。

ちなみにSJISのところをかえればいろいろな文字コードにかえれるようです。
    • good
    • 0

データベースから参照した値が


$mozi = "あいうえお";
だとするとPHPの関数
$mb_convert_encoding("$mozi","SJIS");
で文字コードをSJISに変更できたような
    • good
    • 0

> ということはLinux上でファイルのエンコードを変える


> (nkfで変更)ということでしょうか?クライアント側の
> web画面でエンコードを”EUC"に変えるということでしょうか?

どちらでもOKです。
    • good
    • 0

こんにちは。



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

HTMLファイルをEUC-JPに変更してあげると、ちゃんと表示できるかと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/10/01 10:35

多分、internal_encodingとhttp_outputの問題でしょう。


php4のmbstring関連を参考にして、正しい設定をしてみて下さい。

参考URL:http://jp2.php.net/manual/ja/ref.mbstring.php
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/10/01 10:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!