<![CDATA[ [モジュール] check_charset (文字セットの環境設定を確認する) - My Forums]]> https://forums.modx.com/thread/?thread=56651 <![CDATA[ [&#12514;&#12472;&#12517;&#12540;&#12523;] check_charset &#65288;&#25991;&#23383;&#12475;&#12483;&#12488;&#12398;&#29872;&#22659;&#35373;&#23450;&#12434;&#30906;&#35469;&#12377;&#12427;&#65289;]]> https://forums.modx.com/thread/56651/check-charset#dis-post-332767 (基本的に管理画面内での設定情報の表示となります。)
←画面例(赤丸は合成)

具体的には、以下の3点について、設定内容を表示します。

■1.system_settings
   テーブル「(modx_)system_settings」から読み込まれるもの。

$modx_charset
 主に、画面表示の文字エンコーディングに使われていると思われます。

■2.config.inc.php
   「manager/includes/config.inc.php」により設定されるもの。

$dbase
 データベース名(バッククォート「`」で囲まれているかどうかの確認用)

$database_connection_charset
 データベースの接続に使われる文字セット
 「SET CHARACTER SET」、もしくは、「SET NAMES」(MODxバージョン0.9.6.2~の場合)に使用されます。
 (下記「3.MySQL VARIABLES LIKE character_set...」の元になる設定です)

$database_connection_method(MODxバージョン0.9.6.2以上の場合のみ)
 データベースの接続時に、文字セット設定に使用するコマンド。
 「SET CHARACTER SET」、もしくは、「SET NAMES」のどちらか。

■3.MySQL VARIABLES LIKE character_set...
   実際にMySQLデータベースとの接続で設定されている情報
   以下の2つの状態で、それぞれどのように設定されているかを確認します。

Manager default
 管理画面で「manager/index.php」が最初に接続した状態

DBAPI connected
 「manager/includes/extenders/dbapi.mysql.class.inc.php」の
 「DBAPIクラス」による接続が行なわれた後の状態

MODx管理画面から入力された文字のエンコードは、「character_set_client」でエンコードされていると認識され、
character_set_connection」に変換されてからデータベースに記録されるようです。

逆に、
データベースからMODx側に送られる文字は、「character_set_results」に変換されてから送られてくるようです。

ちなみに、
MySQLサーバ側の、デフォルトの文字セットの設定は「character_set_server」に、
MODxに使用しているデータベースの文字セットの設定は「character_set_database」に、
(正常にデータベースに接続されていれば)それぞれ反映されるはずで、
「SET CHARACTER SET」が使われた場合、「$database_connection_charset」の内容にかかわらず、
character_set_connection」は、「character_set_database」と同じ値に設定されます。

参考) MySQL 5.1 リファレンスマニュアル/9.4. 接続のキャラクタセットおよび照合順序
http://dev.mysql.com/doc/refman/5.1/ja/charset-connection.html
参考例(上記画面例のケース)
私が実際に体験した文字化けのケースでは、以下のような環境において、
ドキュメント新規作成やチャンクの作成・編集で、全角チルダ「~」や機種依存文字等が文字化けしていました。
設定情報をよくみると、データベースをutf8で作ったにもかかわらず、
「Manager default」では、「character_set_connection」と「character_set_database」がujis(EUC)になっていました。(上記画面例参照)
----
MODx 0.9.6.1p2
PHP 5.1.6
MySQL 5.0.22(サーバ側デフォルト文字セット:EUC)
MODxに使っているデータベースはutf8
$database_connection_charsetもutf8
----
色々調べた結果、このケースでは、接続の際のデータベース名の処理に不具合があることが原因だとわかりました。
(バージョンアップにより、この不具合は解消されるかもしれません)
以下のような「manager/includes/config.inc.php」10行目のデータベース名の2つのバッククォート「`」を削ることで回避できます。
ただし、データベース名にハイフン「-」やMySQL予約語(create等)を使っていないことが条件になります。
$dbase = '`dev_modx`';


インストール方法

いったん、このページの添付ファイルをパソコンに保存するなどしておいて、
MODx管理画面のモジュール>モジュール管理で「モジュールの作成」を開き、
保存しておいたファイルをテキストエディタで開き、全て選択してコピー、
管理画面の「モジュールコード」に貼り付けます。
モジュール名に「check_charset」を入力、
その他、説明等を適宜入力して、保存してください。
管理画面を再読み込みするなどして、モジュール>check_charsetで、設定情報が表示されるはずです。
※作りかけのモジュールをそのまま改造して作ったので、ソースはかなり荒いと思います。ご容赦下さい。
追記)
0.9.6.2の場合、$database_connection_methodも出すようになっているはずなのでこれを追記。
キャプチャ画像とMySQLリファレンスへのリンクを貼りました。(問題あれば削除します)
character_set_server、character_set_database等について説明を加え、事例の説明も変更しました。(2008-09-04 23時30分頃)]]>
kazuike Sep 04, 2008, 04:49 AM https://forums.modx.com/thread/56651/check-charset#dis-post-332767