こんばんは~
レンタルサーバー利用で、同じく「? ? ? ?」になる文字化けに悩んでいました。
kazuikeさんのバッククォートを削る方法を試してみたら一気に解決しました。
この方法すごい~感動しました。ありがとうございます。
「mysql_select_db()」について、一応少し調べてみましたが、データベース名のバッククォートと文字化けに関する話題は
ここ以外には見当たらないですねぇ…。かなり特殊な環境依存なのでしょうか?
元々「str_replace()」でバッククォートを取る処理をしているということは、
(ハイフン付きのDB名以外なら)configの中身でバッククォートを取っちゃっても大丈夫ですよね。(多分)
ちなみに私の文字化けが起きた時の環境です。
参考になるでしょうか。
■サーバ環境
■.htaccessに記述していた内容
php_value default_charset UTF-8
php_value mbstring.language Japanese
php_value mbstring.internal_encoding UTF-8
php_value mbstring.http_input auto
php_value mbstring.http_output pass
php_flag mbstring.encoding_translation On
php_flag mbstring.func_overload 0
php_flag magic_quotes_runtime Off
どこかにあったMEGUさんの投稿を参考にしました。
■php.infoで確認した「mbstring」の項目
[table]
[tr][td]Directive[/td][td]Local Value[/td][td]Master Value[/td][/tr]
[tr][td]mbstring.detect_order[/td][td]auto[/td][td]auto[/td][/tr]
[tr][td]mbstring.encoding_translation[/td][td]On[/td][td]Off[/td][/tr]
[tr][td]mbstring.func_overload[/td][td]0[/td][td]0[/td][/tr]
[tr][td]mbstring.http_input[/td][td]auto[/td][td]pass[/td][/tr]
[tr][td]mbstring.http_output[/td][td]pass[/td][td]pass[/td][/tr]
[tr][td]mbstring.internal_encoding[/td][td]UTF-8[/td][td]EUC-JP[/td][/tr]
[tr][td]mbstring.language[/td][td]Japanese[/td][td]Japanese[/td][/tr]
[tr][td]mbstring.substitute_character[/td][td]no value[/td][td]no value[/td][/tr]
[/table]
■MySQLの「サーバー変数と設定値」
[table]
[tr][td]変数[/td][td]セッション値[/td][td]グローバル値[/td][/tr]
[tr][td]character set client[/td][td]utf8[/td][td]latin1[/td][/tr]
[tr][td]character set connection[/td][td]utf8[/td][td]latin1[/td][/tr]
[tr][td]character set database[/td][td]latin1[/td][td]latin1[/td][/tr]
[tr][td]character set results[/td][td]utf8[/td][td]latin1[/td][/tr]
[tr][td]character set server[/td][td]latin1[/td][td]latin1[/td][/tr]
[tr][td]character set system[/td][td]utf8[/td][td]utf8[/td][/tr]
[/table]
■MODxのファイルに加えた変更
manager/includes/config.inc.phpに以下の記入。
$database_connection_charset = 'utf8';
■文字化けした内容
- MODx設定から「サイト名」に日本語を指定すると「? ? ? ?」(どんな文字でも)
- チャンクなどリソースの「結果がありません」表示が「? ? ? ?」
- ドキュメントを新規作成し、タイトルや内容に日本語を指定すると「? ? ? ?」(どんな文字でも)
- 「? ? ? ?」になった部分は、phpMyAdminから見ても「? ? ? ?」
■文字化けしなかった内容
- 既存ドキュメントに日本語を含めて編集し、上書きした場合
■文字化けが直った方法
- kazuikeさん投稿の「config.inc.phpの「$dbase」にセットされている値のバッククォートを削除する方法」
- soushiさん投稿の「SET CHARACTER SETが出てくる部分にSET NAMESを追加する方法」
ちょっと違うのは、全角チルダなど特定の文字が化けるわけではなく、全部化けていた点です。
少し前にSSMxさんが投稿されていた状態と同じです。
あと、私のつたない英語力でtkfmさんが投稿されていたスレッドを読んでみると、
「インストールの時点でSET NAMESかSET CHARACTER SETか選べるパッチ作った」みたいな内容(soushiさんの解決策)でしたが、
0.9.6.2-rc2には、まだ採用されてなかったですね。文字化けも直らなかったのでバッククォートの問題も残ったままだと思います。
長々とすみません。
他の文字化けされている方に少しでも参考になれば幸いです。