PHPプログラムで生成される関係で、XOOPSは基本的に文字コードEUCでエンコードされている。サイト内の文字コードを統一させようともくろんでいる私にとっては、これが一番厄介な問題。
現在、配布されているモジュールは全てEUC形式だし、いろんな意味でバグだしが大変なようで、試している人はいるけれど、あえて配布しているサイトはなし。。。(・_・、)グスン
ようやく、UTF-8形式への変換方法を記載しているサイトにたどり着き、なんとかUTF-8化して設置でけました。 ヽ(^o^)丿それぞれのモジュールもエンコードできて、見た目だけはUTF-8になりました。これからの検証がやっかいかもしれないけど、とりあえずは自己満足の世界に浸ってます。
インスートル前の準備:ソースの変更箇所
xoops-2.0.14-lang-ja-eucjpでEUC-JP書かれている部分を変更する。
/html/install/language/japanese/install.php line 181
//define('_INSTALL_CHARSET','EUC-JP');
define('_INSTALL_CHARSET','UTF-8');
/html/language/japanese/global.php line 168
//define('_CHARSET', 'EUC-JP');
define('_CHARSET', 'UTF-8');
/html/modules/xoopsheadline/language/japanese/headlinerenderer.php line 33
//$value = is_string($value) ? mb_convert_encoding($value, "EUC-JP", "auto"): $value;
$value = is_string($value) ? mb_convert_encoding($value, "UTF-8", "auto"): $value;
//$value = $value
インスートル前の準備:ソースファイルの文字コードの一括変換
jme 漢字コード変換プログラム(EUC-JP → UTF-8 一括変換できる優れもの)を使って*.php *.sql *.htmlファイル全てを変換。自動判定モードでせず、EUC-JP から UTF-8 改行LF 指定で行うと上手くいきます。
*jme65 の変換でASC、UTF-7認識で表示されてるものは(たぶん日本語がないもの)変換しない方が良い。
UTF-8用.htaccessで指定
PHP を Apache モジュールとして使用する場合、Apache用設定ファイルや .htaccess ファイルに命令を記述することによりPHPの設定を行うことが可能です。専用サーバーで運用される場合は別ですが、レンタルサーバーなどの共用サーバーで運用する場合には、WebサーバーApacheの設定ファイルhttp.confやPHPモジュールの設定ファイルphp.iniの設定を自分用にカスタマイズすることはできません。そこでXOOPSをUTF-8で運用したいディレクトリについて.htaccessにより、http.confやphp.iniの設定を変更する必要性があります。 XOOPSのルートディレクトリなどにphpinfoを設置して、主の設定(Master Value)確認しUTF-8用のチューニングを行います。
php_valueは、指定した変数の値を設定します。
php_flagは、論理値のオプション設定を変更するために使用します。
php_value output_handler none
php_value default_charset UTF-8
php_value mbstring.language uni
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_value mbstring.detect_order auto
php_value mbstring.substitute_character none
これら処理が終わったらサーバーにUPし、文字化けしていなければエンコード成功です。
あとはそれぞれ使いたいモジュール同じような感じでファイルを変換して無理やりエンコードしてみました。大体のものはMultilingual CMS - B-Wiki - HOWTO/.htaccessでのUTF用チューニングで書かれている通りでUTF-8化できます。
≪ all done