とりあえず、私として導き出した結論は、
PHPの「mysql_select_db」は、与えられたデータベース名がバッククォートで囲まれていると正しく動作しないらしい。
ということです。
PHPマニュアルには、残念ながらそのあたりは載ってませんね。
http://jp.php.net/manual/ja/function.mysql-select-db.phpMODxの中でも、mysql_select_dbを使う箇所では、
たいていの箇所でバッククォートを削る処理を入れています。
(ってことは、MODxでは、データベース名に「create」等のMySQL予約語は使えないってことですね)(※2)
例えば、DBAPI(manager/includes/extenders/dbapi.mysql.class.inc.php)も、
mysql_select_db直前の91行目で、バッククォートを削っています。
$dbase = str_replace('`', '', $dbase); // remove the `` chars
残念ながら、管理画面の「manager/index.php」等、何箇所か、これをやっていないところがあります。
そのため、「character_set_database」が壊れて、文字化けの不具合が出ていると思われます。
で、一番簡単な対処方法は「manager/includes/config.inc.php」の10行目あたりの
$dbase = '`hogehoge`';
の2つのバッククォート「`」を削って、
$dbase = 'hogehoge';
とすることですね。
なお、この現象、および、対処法の対象となる環境は、(私のわかる範囲では)以下です。
MODxの設定をutf8にしていて、MySQLサーバー側のデフォルトがutf8以外、さらに、
MODx用のデータベースを「utf8」で設定(character_set_databaseをutf8に)している場合、
多くの場合で、全角チルダ「~」や機種依存文字が「?」に化ける。
(ドキュメント新規作成では化け、編集では化けない。チャンクは新規も編集も化ける。等)
ちなみに、設定値を調べるには、phpMyAdminやコマンドラインから、
MODx用のデータベースに対して、SQLで「SHOW VARIABLES LIKE 'character_set%';」を実行します。
あと、参考までに…
対処方法として考えられる方法に、
mysql_select_db直前で、バッククォートを削る以下の行を挿入する。
$dbase = str_replace('`', '', $dbase); // remove the `` chars
ということが考えられます。
MODx0.9.6.1p2では、「mysql_select_db」を使っている箇所が15箇所あり、
そのうち、上記の対応済みと思われるものが9箇所、
以下の6箇所が未対応と思われます。(使われてなさそうなものも含む)
--------
manager/index.php(140):
manager/includes/document.parser.class.inc.php(2480):
manager/includes/veriword.php(79):
manager/media/browser/mcpuk/connectors/php/config.php(49):
manager/media/ImageEditor/config.inc.php(22):
manager/processors/login.processor.php(23):
--------
ちなみに、以下の2箇所に関しては、現状では呼び出し側で対応しているようです。
--------
install/sqlParser.class.php(28):
manager/actions/bkmanager.static.php(269):
--------
(※1)タイトル変えました。
(※2)データベース名にMySQL予約語を使っても大丈夫そうです。