mysqlとphpの文字化けで悩んでいます。


最終的に

SET NAMES utf8

で解決しましたが、これを使わずに解決したいと思っています。

php5 mysql5
コードはutf8

my.cnf
[mysqld]
default-character-set = utf8
[mysql]
default-character-set = utf8

php.ini 下記コメントアウト
mbstring.http_input
mbstring.http_output
mbstring.internal_encoding
mbstring.language

show variables like 'char%';

character_setは
_client
_connection
_database
_results
_server
_system
全てutf8

_filesystem binary

DBへのクエリは、pear_DB。
送信前に mb_detect_encoding で送信sqlを確認で UTF-8 と表示。
(mb convert encodingで auto から utf-8 へ変換済み)


自分なりに注意していたのですが、
どこでミスをしているのか検討がつかない状態です。
ミスしてそうなところがあれば、アドバイス頂けると助かります。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2008/02/22 03:39:28
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:tezcello No.1

回答回数460ベストアンサー獲得回数69

ポイント60pt

お呼びがかかったので一応こちらへ。


php.ini への記述は、最初に mbstring.language を記述する必要があるらしいのでご注意ください。

また、mbstring.http_input, mbstring.http_output に pass 以外を設定していたり、mbstring.encoding_translation が有効になっていると、エンコードがらみの問題に気が付くのが遅れる可能性が高いと思います。


ご利用のサーバは、CentOS でしたっけ。

php.ini がすべてコメントアウトとは、デフォルトでは日本語を使わない設定なんですね。

MySQL もデフォは日本語非対応なのを無理矢理合わせたって感じがなんとなく漂っていますが...

MySQL は全然使った事がないので、コメントでお茶を濁してました。

個人的には PostgreSQL 派なんですが、最近は SQLite が気になっています。

(結局そんなにものすごいアクセスがある訳じゃないし、デフォで UTF-8 らしいし、データの可搬性も高そうだし...)

id:onigirin

どうもありがとうございます。

借りている専用サーバーの初期設定だったので、気づきませんでした・・・。

やっぱりphp.iniの記述はチェックしておくべきですね。

どうもありがとうございました!

2008/02/22 03:38:16
  • id:tezcello
    どんな文字がどんな感じに化けるのかを示されるとヒントになるのでは?

    > php.ini 下記コメントアウト
    > mbstring.http_input
    > mbstring.http_output
    > mbstring.internal_encoding
    > mbstring.language

    コメントアウトにするのではなく、明示した方がよいと思いますよ。(php本体を変更してデフォルトを変更しているとは思い難いですけど)
    特に、UTF-8 はマルチバイト文字ですから、mbstring.language, mbstring.internal_encoding は必要では?
    で、mbstring.internal_encoding は、mbstring.language の後ろに記述する必要があるそうです。
  • id:onigirin
    どうもありがとうございます。

    php.iniは、何故か全てコメントアウトされていました。
    mbstring.http_input auto
    mbstring.http_output utf-8
    mbstring.internal_encoding utf-8
    mbstring.language Japanese

    にしましたが、文字化けしていました。
    htaccessで設定してみても、同じ結果でした。

    文字化けは、

    アンパンソースマン

    と入れたとき、

    アンパンソã

    となっていました。
    HTMLページで表示したときは、
    アンパンソ
    と表示されます。


    ちょっとしたことでもとても参考になっているので、
    ぜひ解答欄に書き込んでくださいね。
  • id:onigirin
    skip-character-set-client-handshake

    を書くことで、解決しました。
    どうもありがとうございました。
  • id:onigirin
    キャンセルにするとデータが消える気がするので、
    もしよかったら tezcello さん回答になにか書いておいてくださいね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません