人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

mysql+phpで「?」「?」など特定の文字だけが?に文字化けします。原因と対策方法を教えてください。


原因はたぶん、mysqlのCHARACTER SETがeucなのにutf-8に変換して格納してしてしまっているからかな?
現在set names utf-8して、すべての取り扱いをutf-8にしてしまっています。
mb_convert_encoding($str, "utf-8", "auto");ページコードもutf-8です。

●質問者: くいっぱ
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:EUC MySQL PHP SET STR
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● pahoo
●22ポイント

ご利用のパッケージが MySQL 4.1 以上という前提で回答します。

default-character-set = utf8

に設定してください。手順は「MySQL で、キャラクタセットを指定してデータベースをインポートする方法」を参照してください。

MySQL側がutf-8格納設定されていれば、mb_convert_encoding($str, "utf-8", "auto"); は不要です。auto指定すると、かえって文字化けの原因になります。

mb_internal_encoding('utf-8') は指定してください。

◎質問者からの返答

ごめんなさい注釈不足で。DBがutf-8なら問題ないです。

ただ現象のでているレンタルサーバーが残念なことにsjisかeucしか設定できないんです。


ここらへんは入ってます。

mb_language('Japanese');

mb_internal_encoding('UTF-8');

mb_http_output('UTF-8');


2 ● pahoo
●22ポイント

ただ現象のでているレンタルサーバーが残念なことにsjisかeucしか設定できないんです。

MySQLがsjisかeucしか設定できないということですね。

それであれば、MySQLをeucに設定し(PHPはsjisで不具合が出ることがあるので)、

HTML/PHP も euc-jp で統一するのが無難です。


どうしても HTML/PHP 側を utf-8 にしなければならないのであれば

mb_convert_encoding($str, 'euc-jp', 'utf-8') で MySQL 用のデータを生成し、

MySQLから受け取ったデータは mb_convert_encoding($str, 'utf-8', 'euc-jp') でデコードしてください。

◎質問者からの返答

一応ページコードはutf-8からは動かしたくないです。

mb_convert_encoding($str, 'euc-jp', 'utf-8')逆かな?


そうですね。。。

やはりこれが一番の近道ですか。。。

configで弄れるようにしておいたのですが、動いているようだったので気がつきませんでした。

次回のメンテのときにでもダンプして差し替えを試みます。


3 ● ken33jp
●22ポイント

>特定の文字だけが

DBに格納する前に、特定の文字だけを別の文字に変換して格納。

取り出すときは、逆の操作をして、元の文字列に戻す。

HTMLユニコードに変換してもよいかも。

http://code.cside.com/3rdpage/jp/unicode/converter.html

◎質問者からの返答

~とかですかね。

http://anond.hatelabo.jp/ とかでも同様の現象が放置されてますけどユーザーが入力により回避してますね。

どこかに化ける一覧とかないでしょうか。

んー。


4 ● i_kumagoro
●24ポイント ベストアンサー

?サーバのデフォルトの設定がいじれないという事だけでしたら、デフォルトがeucだとしてもデータベース、テーブルあるいはカラムごとにキャラクタセットを指定でます。MySQL 4.1用ですが、日本語のドキュメントもあります。

◎質問者からの返答

そうですね。

データベースのクリエイトコマンドもssh経由では禁止されているので変更できないのですが、

テーブルにキャラコードつけておけば問題なかったのかもしれませんね。

http://dev.mysql.com/doc/refman/4.1/ja/charset-table.html

ALTER TABLE table_name DEFAULT CHARACTER SET utf-8

こんな感じかな。

いずれにしろ一回データをダンプしないとだめそうですね。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ