久しぶりの技術的な書きこになります。
ながらくおまたせしました。m(_._)m
いろいろな事が片付きました。
最近、XOOPSをやり始めたのですが
動作が不安定きわまりない!!エラーが出たり文字が化けた
意図した動作をしないってのがあったのですが、
めちゃめちゃ考えた末判明しました。
このBlogをインストールする時にも相当悩んだのですが
たぶんこれが原因でしょう。
さて、原因を紹介しようと思います。
XOOPSもしくはBlognplsuを解凍してディレクトリ上にUpします。
普通にインストールできるのですが、ログインができない!!
日本語文字(2バイト文字)を入れると文字が化ける!!
そういった症状が出ます。
現在、Linuxは各種文字コードがあふれており
S-JISからEUC-JP・UTF-8等々!!過渡期となっています。
将来的にはUTF-8になるのでは?という感じではありますが・・・。
さて、文字化けするメカニズムはこうです。
当方使用している環境は、EUC-JP環境となります。
ただ、ここで稼働しているBlogはUTF-8です。
まず、ここで差異が発生します。
php.iniを設定する上で、マルチバイトの振る舞いについて
設定する項目【mbstring】があるのですが、
ここでメインとなってくる文字コードを指定する必要があるのです。
前回、Blogで各種実験を行った際
こちらのmbstringの設定をUTF-8の設定にして動かせていました。
しかしながら、今回導入しようとするXOOPSはECU-JPで
コーディングされており動作不良となった訳です。[:しくしく:]
そこに絡んでくるMySQLも動作不良に一役買っていました。
MySQLも同様に文字コードの独特の仕様があるのです。
そもそも、こういった問題が発生する上で考えられた
自動文字コード変換システムですがこれが仇になっているのでした。[:はうー:]
文字コードの差異があった場合、
自動で適切な文字コードの変換する課程で文字化けが発生します。
その辺りもMySQLの設定を明示的に使用する文字コードに修正しました。[:チョキ:]
○設定値
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set = ujis
skip-character-set-client-handshake
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
[mysql.server]
user=mysql
basedir=/var/lib
default-character-set = ujis
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set = ujis
#[client]
default-character-set = ujis
また、BlogやXOOPSを使う上で使用するDBを作成する上でも
明示的に文字コードを指定する事で文字化けは回避できるようです。
DBを作成する際にスクリプトがどの文字コードで
コーディングされているかを確認して、
その文字コードのDBを作成してやらばOKです。
また、EUC-JPでコーディングされたスクリプトと
UTF-8でコーディングされたスクリプトの混在は
まず、php.iniでOS内部で使用しているECU-JPとしました。
○設定値
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0
UTF-8でコーディングされたスクリプトは、
ディレクトリごとにこういった.htaccessを作成して個別設定としました。
○設定値
php_value mbstring.language Japanese
php_value mbstring.encoding_translation On
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.internal_encoding UTF-8
そんなこんなで、XOOPSが使用可能となりました。
アドレスは、【http://www.rurineko.com/】です。
またOpenはしていませんが、とりあえず内部的に作っていっています。