Moodle で日本語が入力・保存されない場合の対処

Moodle を UTF-8 で運用する際、サーバの PHP のデフォルト文字コードが EUC-JP だったりすると、Moodle で入力した日本語が保存されなかったり、文字化けしたりします。

そういう場合は、moodle/config.php に以下の記述を追加します。

ini_set("default_charset", "UTF-8");
ini_set("mbstring.encoding_translation", "off");
ini_set("mbstring.substitute_character", "none");
ini_set("output_buffering", "on");
ini_set("output_handler", "mb_output_handler");
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_http_input("auto");
mb_http_output("UTF-8");
if (function_exists("mb_http_output") &&
	function_exists("mb_internal_encoding") &&
	function_exists("mb_convert_variables")) {
	mb_convert_variables(((mb_http_output() != 'pass') ? mb_http_output() : mb_internal_encoding()), "ASCII,JIS,EUC-JP,eucJP-win,UTF-8,SJIS,SJIS-win", $_POST);
}
$CFG->lang = 'ja_utf8';

最後の 1行以外は、個人的に PHP で UTF-8 のシステムを作成する際によく使うコードです。

最後の 1行については、【サイト管理】 → 【言語設定】 → 【言語設定】 → 【デフォルト言語】 の説明に

あなたがデータベース接続問題に関するローカライズされたメッセージを表示させたい場合、config.php に $CFG->lang=”yourlangcode_utf8″; と設定することもできます。

という記述があったので、追加してみたら上手くいきました。MySQL のバージョンや設定なども関係してくると思いますが、その辺は未調査…。