[PHP-users 11071] SQL(SJIS)上の「昇」がphp(EUC)で表示できない

Tatsuya Matsuyama php-users@php.gr.jp
Thu, 24 Oct 2002 17:39:16 +0900


松山と申します。
Red-Hat7.3J+php-4.2.1を使用しています。

同じホスト上でapacheも稼働しており、
イントラ内のSQLseverを参照するwebアプリを作成しています。

漢字コードについての質問です。
php内はEUC-JP
NT+SQLserverはSJISです。

phpでは、
eucで保存された漢字交じりのテンプレートファイルに
sqlから抽出したsjisをeucに変換して表示しています。

この方法でSQLから引っ張ってきた一部の漢字が表示ができない
(判明しているのは「○○ (<-全角スペース)昇」の「昇」)
症状があり困っています。

データベースから取り出した直後のmb_convert_encoding前の
$data->first_name_jに入っている時点でもうアウトのようです。

わりと一般的な漢字かと思うのですが、
何か回避方法などございましたら、ご紹介ください。
よろしくお願いします。

以下、mb関連のphp.iniと
簡単なソースです。

■php.ini(抜粋)
[mbstring]
mbstring.detect_order           = AUTO
mbstring.internal_encoding      = EUC-JP
mbstring.http_output            = SJIS
mbstring.http_input             = auto
mbstring.substitute_character   = none

■EUCで保存されているテンプレートにデータを入れるphp
(このphpファイル自体もEUCです。)
$tmpl->loopset("jyugyouin");
for ($i=0; $i<$resultNumRows; $i++)
{
 $data = sybase_fetch_object($result);

 $jyugyouin_id = $data->jyugyouin_id;
 $delete_flag  = $data->delete_flag;
 $nyusha_day   = $data->nyusha_day;
 $taisha_day   = $data->taisha_day;
 
 $last_name  = mb_convert_encoding($data->last_name_j,  "EUC-JP", "auto");
 $first_name = mb_convert_encoding($data->first_name_j, "EUC-JP", "auto");
 $shozoku    = mb_convert_encoding($data->shozoku_name, "EUC-JP", "auto");
 $group_name = mb_convert_encoding($data->group_name,   "EUC-JP", "auto");

 $name = $last_name . " " . $first_name;

 $tmpl->assign("name", $name);
 $tmpl->assign("jyugyouin_id",       $jyugyouin_id);
 $tmpl->assign("login_user_name",    $data->login_user_name);
 $tmpl->assign("jyugyouin_selected", $selected);
 $tmpl->assign("delete_checked",     $delete_checked);
 $tmpl->assign("sekininsha_checked", $sekininsha_checked);
 $tmpl->assign("shozoku",            $shozoku);
 $tmpl->assign("group_name",         $group_name);
 $tmpl->assign("shima",              $color);
 $tmpl->assign("nyusha_day",         $nyusha_day);
 $tmpl->assign("taisha_day",         $taisha_day);
 $tmpl->loopnext();
}