2005年08月08日

海外PHPスクリプトを、日本語環境で使用する!

簡単なmb_magic.phpスクリプトを書いてみました。
使い方はソース自体にも書いてありますが、

1) スクリプト中のmysql_queryをすべて、"mb_mysql_query"に書き換える。(ほかも同様。)
  何も考えずに、エディタの一括置換コマンドなどを使って置換してください。
  これがいちばん手っ取り早い方法かと。PHPは関数の再定義ができないので。

  洗練されたPHPスクリプトなら、各関数あたり、1カ所だけ編集すればよいこともあります。

2) サーバとクライアントの文字コードを設定する。
  デフォルトでは、クライアントがWindows、サーバがEUC-JPという設定になっています。
3) 各スクリプトの最初で、このファイルをRequire_onceする。

そうすると、データベースにアクセスする時点で、勝手にコードを変換してくれます。
とりあえずこれで、phpMyEditやら、phpCodegenieやら、その他の海外スクリプトも動いています。

// ================================================
// mb_magic.php Ver 1.0 // 2005-06-23
// You can set the codes of Scripts and Database.
// (C) 2005 S.Dozono
// ================================================
//
// usage:
// 1) include this script in your project.
// 2) change
// mysql_query() -> mb_mysql_query()
// mysql_db_query() -> mb_mysql_db_query()
// mysql_fetch_array() -> mb_mysql_fetch_array()
// mysql_fetch_row() -> mb_fetch_row()
// mysql_result() -> mb_mysql_result()
//
// 【スクリプトとデータベースの文字コードを指定できるようになります。】
// (1) このスクリプトをインクルードする。
// (2) mysql_query関数の頭に、mb_を追加する。
// (3) mysql_fetch_array関数の頭にmb_を追加。
// (4) mysql_fetch_row, mysql_fetch_assocなども同じように。
// (5) これで指定コードでの運用ができるようになるはずです。
// (6) スクリプトの英和翻訳まではしてくれません。(^_^)ご自分で!
// ……GPLで公開します。

define("DB_CODE","EUCJP-win"); //データベースの文字コード
define("SCRIPT_CODE","SJIS-win"); //スクリプトのコード
define("DB_FIRST_SETTING","SET NAMES UJIS"); //MYSQLの文字コードを設定(MYSQL 4.1以降用)

function mb_conv2DB($text)
{
return mb_convert_encoding($text, DB_CODE, SCRIPT_CODE);
}

function mb_conv2SCRIPT($text)
{
return mb_convert_encoding($text, SCRIPT_CODE, DB_CODE);
}

/* Writing to DB */

function mb_mysql_query($query, $resource='')
{
$tmp_query = DB_FIRST_SETTING;

if($resource != ''){
mysql_query($tmp_query, $resource);
} else {
mysql_query($tmp_query);
}

$qry = mb_conv2DB($query);

if($resource != ''){
$ret = mysql_query($qry, $resource);
} else {
$ret = mysql_query($qry);
}
return $ret;
}

function mb_mysql_db_query($database, $query, $resource)
{
$tmp_query = DB_FIRST_SETTING;
mysql_db_query($database, $tmp_query, $resource);

$qry = mb_conv2DB($query);
$ret = mysql_db_query($database, $qry, $resource);
return $ret;
}

/* Reading from DB */

function mb_mysql_result($result, $row, $field='')
{
if($field != ''){
$mixed = mysql_result($result, $row, $field);
} else {
$mixed = mysql_result($result, $row);
}
$ret = mb_conv2SCRIPT($mixed);
return $ret;
}

function mb_mysql_fetch_array($result, $result_type)
{
$row = mysql_fetch_array($result, $result_type);
if(!is_array($row)){
return $row;
}
while(list ($key, $val) = each($row)) {
$row[$key] = mb_conv2SCRIPT($val);
}
return $row;
}

function mb_mysql_fetch_assoc($result)
{
$row = mysql_fetch_assoc($result);
if(!is_array($row)){
return $row;
}
while(list ($key, $val) = each($row)) {
$row[$key] = mb_conv2SCRIPT($val);
}
return $row;
}

function mb_mysql_fetch_row($result)
{
$row = mysql_fetch_row($result);
if(!is_array($row)){
return $row;
}
while(list ($key, $val) = each($row)) {
$row[$key] = mb_conv2SCRIPT($val);
}
return $row;
}

posted by SDozono at 11:54| Comment(0) | TrackBack(2) | PHP | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/5711662
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック

海外製オープンソースが文字化けするときは
Excerpt: いくつかの修正方法があると思いますが、 mb_convert_encoding あたりを追加するとよいようです。
Weblog: meneame.net
Tracked: 2006-01-31 17:41

phpCodeGenieで、テーブル編集のPHPを自動生成
Excerpt: サッカー選手APIってのを作ろう、と、データベースに2000件ほどデータを挿入してみました。現状は4-4-2のフォーメーション(固定)で、ランダムに選手を割り振るようになっています。現役の選手から往年..
Weblog: まねきねこプロジェクト|開発ブログ
Tracked: 2008-07-12 10:00
WebとCTI、VoIP技術の高みを目指して - 技術者の24時間