[PHP-users 28389] AS400からのデータ取り込みで文字化け(?)

Kenichiro Fuji k_fuji @ sales.mitsumi.co.jp
2006年 2月 13日 (月) 18:07:37 JST


冨士と申します。
先にPHPで柴田さんにあまり役に立たない回答をしていたのですが、
少し時間が出来たので、前に作った環境を修正して、
文字化けの件を解決したいと思いました。
#機会を与えていただいた柴田さんに感謝。
で、以下の環境でphp.iniとodbc.iniをいじってみたところ、
文字化けはなくなりましたが、ブランク(というよりそこが詰められている状態)
になってしまいました。
元データでエイギョウ1ブ.1カ(元データは半角カナ)となっているカラムが
1.1(この後ろに半角スペースが付いています)となってしまいます。
元データが半角カナなので表示されないのではないかと思うのですが
いまいち自信がありません。
#mbstring.substitute_characterのあたりを修正すればいいのでしょうか?
半角カナが全角になっても構わないのですが(むしろその方がwelcome)
この場合どの項目を修正したら改善するでしょうか。
たぶん、SJISなデータベースに接続した場合の設定になると思うのですが、
どのあたりを見たらよいか、などポインタをお示し頂けると幸いです。

--------ここから環境----------
AS400(DB/400)にCentOS+PHPでunixodbc+iSeriesAccess経由で接続する。
システムロケールがUTF-8なので内部エンコーディングはUTF-8として、
http出力は(対象web端末はwindowsなので)sjisにする。
AS/400上DBはSJIS(と思われる)。
OS:CentOS4.2
カーネル:2.6.9-22.0.2.EL (i686)
Apache:Apache/2.0.52 (CentOS)
PHP:4.3.9

unixODBC:
※yum list | grep unixODBCの結果
unixODBC.i386                            2.2.9-1                installed
unixODBC-devel.i386                      2.2.9-1                installed
unixODBC-kde.i386                        2.2.9-1                installed
freeradius-unixODBC.i386                 1.0.1-3.RHEL4          base
※yum list | grep odbcの結果
php-odbc.i386                            4.3.9-3.9              installed
postgresql-odbc.i386                     7.3-8.RHEL4.1          installed

iSeriesAccess for Linux:
※rpm -qa iSeries* で確認
iSeriesAccess-5.2.0-1.8
#ええと、嘘ついてました。ごめんなさい(汗>柴田さん

環境変数の一部(root権限)
SHELL=/bin/bash
LANG=ja_JP.UTF-8
HOME=/root
LC_CTYPE=ja_JP.UTF-8

odbc.iniについて
http://www-1.ibm.com/support/docview.wss?uid=std358ff90eaaddeeeb549256f80002
b691e&aid=1
の14ページ目を参照して、CSSID=943を追記
[HONODBC]
Description	= iSeries Access ODBC Driver
Driver		= iSeries Access ODBC Driver
System		= XXX.XXX.XXX.XXX
UserID		= hoge
Password	= fuga
Naming		= 0
DefaultLibraries	= moge
Database	=
ConnectionType	= 2
CommitMode	= 2
ExtendedDynamic	= 1
DefaultPkgLibrary	= moge
DefaultPackage		= A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression	= 1
LibraryView		= 0
AllowUnsupportedChar	= 1
ForceTranslation	= 1
Trace		= 0
CCSID		= 943

php.iniの一部(関係ありそうな所を抜粋)
[PHP]
engine = On
output_buffering = On
output_handler = mb_output_handler
register_globals = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0

使用したphpスクリプト:
<?PHP
$DSN="HONODBC";
$db = odbc_connect($DSN,"hoge","fuga")
 or die(odbc_error().":".odbc_errormsg());
print "Connected!";
print "<br>";
print "接続しました";
print "<br>";
$sql = "SELECT * FROM A.B.C C WHERE C.D = 'E'";
print "<b>SQL:</b>$sql\n";
print "<br>";
$rs=odbc_exec($db,$sql)
 or die(odbc_error().":".odbc_errormsg());
print "Query OK!";
print "<br>";
print "クエリーは完了しました";
print "<br>";
odbc_result_all($rs,"border='1' bgcolor='#FFFF99'");
?>



PHP-users メーリングリストの案内