ただいまの質問       
107 
phpquery

関連する質問

おすすめの質問
スポンサー広告(質問)
open-omni.com
open-omni
少しでもコストを抑えて手軽にAS400のオープン化に取り組めるツールとして、PHPの活用をお勧めします!
www.ibiweb.gr.jp
iBI
会員各社のソリューション連携により、AS400におけるアプリケーション環境をトータルでご提供します。
i5php.jp
opensource IBM i
IBM i(AS400)のオープン化を中心として、オープンソースソフトの啓蒙と普及に努めています。
phpquery.jp
opensource IBM i
PHP QUERYは、IBM i(AS400)上のクエリー定義をWeb画面から参照するデータ抽出ツールです。

PHPからAS400のデータベースにODBC接続時、半角カタカナが文字化けする

7 ヶ月前に 質問(as/400) 465.tsuchida 200 pt
Windows上のWebサーバーからAS400のDBに接続するWebシステムを構築しています。
(すでにAS400上で動作しているWebサーバーを、別なWindowsサーバーで動作させるための移植です)
言語はPHP、フレームワークとしてZendFramework3を使用しています。

下記内容でDBに接続していますが、クエリーの結果に含まれる日本語が文字化けします。
元々のシステムはUTF-8で動作しているため、UTF-8で処理したいのですが、半角カタカナの一部が文字化けし正常に動作しません。

   $dsn = "odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=<IPアドレス>;DBQ=<DB名>;ccsid=1208";
   $dbAdapter = new \Zend\Db\Adapter\Adapter([
           'dsn' => $dsn,
           'driver'   => 'Pdo',
           'username' => 'ユーザー名',
           'password' => 'パスワード',
           'driver_options' => array(
               'PDO::ATTR_EMULATE_PREPARES' => 'false',
               'PDO::ATTR_PERSISTENT' => 'true',
           ),
   ]);

dsnのccsidを以下のようにいろいろ試しましたが、UTF-8で文字化けしない状態にはなりませんでした。
    ccsid=1208 //UTF-8:半角カタカナの一部が文字化け
    ccsid=1200 //UTF-16:Webサーバーが動作しなくなる
    ccsid=1041 //文字化け
    ccsid=5026 //文字化け
    ccsid=5035 //Exception発生
    ccsid=942  //SJISでデータが返る(デフォルト値のようです)
    ccsid=290  //文字化け

このODBCドライバを使用してUTF-8の日本語データを受け取ることは不可能でしょうか。

※参考:dsnにcharsetを指定しても無視されるようです。
 (以下を指定しても、ccsid=942と同じ結果(SJIS))
    charset=utf8
    charset=sjis
※ccsid=942(SJIS)でデータを受け取り、UTF-8に変換するという方法も可能なようですが、最終手段と思われます。
※別なWindowsアプリケーションから、同じODBCドライバ"iSeries Access ODBC Driver"を使用してDB接続した場合は文字化けしません。
 (SJISで処理していると推測)
7 ヶ月前に 質問(as/400) 465.tsuchida 200 pt
0 as400

0

answers

回答数

ログインまたはユーザー登録してからでないと
回答はご覧頂けません。