1月にNucleus 3.51にバージョンアップしたばかりだったが、先日、バージョン3.62 日本語版のリリースがあった。日本語などのマルチバイト文字をなるべく正しく処理出来るような追加がされたようだが、今までは文字化けしてなかったのに、バージョンアップしたら文字化けするようになった。
こんな感じに文字化けした。
色々調べたらどうも globalfunctions.php のMySQLの「CHARSET」に関するところが怪しい。とりあえず、その部分(403行目~438行目)をコメントアウトして文字化けを回避することにした。
/* * for preventing I/O strings from auto-detecting the charactor encodings by MySQL * since 3.62_beta-jp * Jan.20, 2011 by kotorisan and cacher * refering to their conversation below, * http://japan.nucleuscms.org/bb/viewtopic.php?p=26581 * * NOTE: shift_jis is only supported for output. Using shift_jis in DB is prohibited. * NOTE: iso-8859-x,windows-125x if _CHARSET is unset. */ /* ← コメントアウト(ここから) if (in_array('mysql',$MYSQL_HANDLER)) { switch(strtolower(_CHARSET)){ case 'utf-8': $charset = 'utf8'; break; case 'euc-jp': $charset = 'ujis'; break; case 'gb2312': $charset = 'gb2312'; break; case 'shift_jis': $charset = 'sjis'; break; default: $resource = sql_query("show variables LIKE 'character_set_database'"); $fetchDat = sql_fetch_assoc($resource); $charset = $fetchDat['Value']; break; } $mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info($MYSQL_CONN)))); if ($mySqlVer >= '5.0.7' && function_exists('mysql_set_charset')) { mysql_set_charset($charset); } elseif ($mySqlVer >= '4.1.0') { sql_query("SET CHARACTER SET " . $charset); } } */ ← コメントアウト(ここまで)