東京都練馬区。Wordpressはおまかせ。印刷・ホームページなど販売促進のためのデザインを提案します。

デザイン事務所ダウンアンダー

営業
10:00-
19:00

XOOPSのUTF-8化に関するメモ

     2012/01/09   技術ノート    野村貞次

旧サーバ(Vine Linux2.6)でEUC-JPで運用していたXOOPSをCentOSに移行しました。

データベースを強制的にUTF-8で読む設定をすることで無事に運用できていたのですが、MyAlbum-Pにおいて問題が発生していました。
「画像の一括登録」において、日本語ディレクトリを指定できないのです。

原因はハッキリしていました。
サーバの文字コードがUTF-8のため、EUC-JPで運用されているXOOPSから見ると文字化けしてしまうのです。

そこで思い切ってXOOPS全体のUTF-8化を図りました。

条件

  • 運用中のサイトを無停止で移行する。
  • 個別トピックの書き換えは最小限にする(結果的に無しになりました)。

準備

  • 該当バージョンのXOOPSインストールファイルを用意。
  • 旧サイトと別のディレクトリにインストールファイルを展開。
    例:旧サイト/x/ 新サイト/x2/
  • インストールファイルのUTF-8化を行う。具体的には各フォルダのlanguage/japanese/フォルダ内のファイルを全てUTF-8にする。
    sshでxoopsディレクトリに移動し、以下のコマンドを実行。
    find . -type f -name “*.php” -exec nkf -w –overwrite {} \;
    該当ディレクトリ以下のEUC-JPのphpファイル がすべてUTF-8に変換されます。
  • /x2/install/language/japanese/install.phpを書き換え。
    define(‘_INSTALL_CHARSET’,’EUC-JP’);

    define(‘_INSTALL_CHARSET’,’UTF-8′);
  • /x2/language/japanese/global.phpを書き換え。
    define(‘_CHARSET’, ‘EUC-JP’);

    define(‘_CHARSET’, ‘UTF-8’);
  • /x2/class/database/mysqldatabase.phpを書き換え。
    $result = mysql_query($sql, $this->conn);の上部に、
    mysql_query(”SET CHARACTER SET UTF8″, $this->conn);
    $result = mysql_query($sql, $this->conn);の上部に、
    mysql_query(”SET CHARACTER SET UTF8″, $this->conn); を追加。
  • /x/themes/ディレクトリ以下を/x2/themes/以下にコピー。

インストール

  • /x2/install/index.phpにアクセスしてインストール。
  • 旧サイトのデータベースをphpMyAdmin等でエクスポートして保存(例:x.sql)。
  • 新サイトのデータベースの構造をphpMyAdmin等で全て削除。
  • 新サイトのデータベースにx.sqlをインポート。

調整

  • 新サイトが正常に動くことを確認したら、/x/を/x-org/にリネーム。
  • /x2/を/x/にリネーム。
  • /x/mainfile.phpの以下の項目を編集。
    // XOOPS Virtual Path (URL)
    // Your database user account on the host
    // Your database user account on the host
    // Password for your database user account
    // The name of database on the host. The installer will attempt to create the database if not exist
  • /x-org/uploads/を/x/に移動。要領が小さければコピーしても良い。

メールヘッダの文字化け対策

  • このままでは、新規登録メール等の件名/送信者が文字化けする(本文は大丈夫)。
  • class/mail/phpmailer/class.phpmailer.php 129行目
    function EncodeHeader ($str, $position = ‘text’, $force=false) {
    if( $position == ‘text’ ) return mb_encode_mimeheader( mb_convert_encoding( $str , mb_internal_encoding() , ‘auto’ ) ) ; // 追加
    if (!preg_match(‘/^4\.4\.[01]([^0-9]+|$)/’,PHP_VERSION)) {
    if (function_exists(‘mb_convert_encoding’)) { //Use mb_string extension if exists.
    if ($this->needs_encode || $force) {
  • 上記の通り一行追加しておく。

参考

     2012/01/09   技術ノート    野村貞次

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

 こちらの記事も読んで見ましょう

XOOPSのUTF-8化に関するメモ 東京都練馬区。Wordpressはおまかせ。印刷・ホームページなど販売促進のためのデザインを提案します。

Copyright©デザイン事務所ダウンアンダー,2009 All Rights Reserved.

ページ先頭へ