XOOPS is a dynamic Object Oriented based open source portal script written in PHP.

平成ホームページ・リフレッシュ委員会

ブログ カレンダー
« « 2020 10月 » »
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

ログイン
ユーザID または e-mail:

パスワード:

IDとパスワードを記憶

パスワード紛失

新規登録

メインメニュー

サイト内検索

パートナーサイト

オンライン状況
17 人のユーザが現在オンラインです。 (2 人のユーザが サイト便利辞典 を参照しています。)

登録ユーザ: 0
ゲスト: 17

もっと...


サイト便利辞典

用途別分類(カテゴリー)別
頭文字(イニシャル)別
A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
あ行  か行  さ行  た行  な行  は行  ま行  や行  ら行  わ・ん  その他  すべて
もじばけたいさく

MySQL 4.1 にて XOOPS 2.0.16a JP を動かす

問題点

MySQL 4.1 以降では XOOPS 2.0.16a JP は文字化けします。

これは、XOOPS 特有の問題ではなく、多くのプログラムが同じ問題を抱えています。

原因

MySQL 4.1 からクライアントからの言語指定が必要になったためです。

4.0 までは データベースへの入力において何もしていなかったので、
データベースの言語設定が EUC-JP でなくとも EUC-JP の格納が可能でした。

4.1 からは データベースへの入力において言語変換を行うようになりました。
データベースの言語設定が EUC-JP に設定しても、デフォルトの入力は latin-1 になります。
入力時は EUC-JP -> UTF-8 -> latin-1 のように変換され、出力時は逆の変換が行われます。
変換できない文字があった場合は、それ以降が切り捨てられます。

対策

クライアントである XOOPS から明示的に言語指定をします。
データベースの言語設定とクライアントからの言語指定が同じ場合は、言語変換は行われないので、
4.0 までと同じ動作になります。

class/database/mysqldatabase.php 90行目


function connect($selectdb = true)
{
if (XOOPS_DB_PCONNECT == 1) {
$this->conn = @mysql_pconnect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
} else {
$this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
}

...

// この行を追加する
mysql_query("SET NAMES ujis", $this->conn);

return true;
}



PHP 5.2.3 以降では mysql_set_charset という関数が用意されました。
こちらを使うことが推奨されています。
関連記事:
参考文献:
Powered by Xwords  based on Wordbook
閲覧者のコメント
投稿された内容の著作権はコメントの投稿者に帰属します。
投稿者 スレッド