###質問内容
PHPからODBCでInformixに接続してデータを取得しようとしています。
PHPからSQLを実行し結果が取得できたのですが、
結果の途中から文字化けを起こしています。
実行結果から、途中から文字化けしていることや、登録されていないデータが含まれていることから、
終端文字のような特殊な文字が原因で文字化けが発生していると考え調査しています。
正しく結果を表示するための方法や解決の糸口など、教えていただけないでしょうか。
###環境
Webサーバ
- CentOS 7 (UTF-8)
- PHP 7.0.18 (UTF-8)
- Apache 2.4.6 (UTF-8)
- InformixのODBCドライバ 4.10 ? 1.3.3 ?
DBサーバ
- Unix
- Informix 7.32fc2 (Shift-JIS)
クライアント
- IE 11 (エンコード:UTF-8)
###作業内容
実行PHP
php
1public function sample(){ 2 try { 3 $db = new PDO("informix:host=192.168.1.10; service=1526; database=sampledb; server=sampleserver; protocol=onsoctcp;CLIENT_LOCALE=ja_JP.utf8;DB_LOCALE=ja_jp.sjis-s;EnableScrollableCursors=1", "user", "password"); 4 $sql = "SELECT 商品名 AS A FROM 商品M"; 5 $stmt = $db->prepare($sql); 6 $stmt->execute(); 7 8 foreach ($stmt as $row) { 9 echo $row['A']; 10 echo '<br>'; 11 } 12 } catch (PDOException $e) { 13 14 } 15}
「商品M」テーブル
|番号|商品名|
|:--|:--:|--:|
|1|ノートパソコン用キーボード|
|2|iPad Air|
|3|デスクトップPC|
実行結果(ブラウザから確認)
ノートパソコン用キ01������2013-07-16 10:02:23���Ռ�:�� iPad Air デスクトッ01������2013-07-16 10:02:23���Ռ�:��
###解決方法
2017/06/07 12:20 追記
最終的な対応方法を共有します。
- Informixドライバを利用し接続しました。
- 接続文字列の「CLIENT_LOCALE」と「DB_LOCALE」の文字コードを統一し、
Informixから取得した結果を、PHP側で対象の文字コードに変換し利用しました。
php
1// 表示用 2public function view(){ 3 $item_list = $this->sample(); 4 foreach ($item_list as $row) { 5 echo $row['A']; 6 echo '<br>'; 7 } 8} 9 10// Informixのデータ取得 11public function sample(){ 12 try { 13 $db = new PDO("informix:host=192.168.1.10; service=1526; database=sampledb; server=sampleserver; protocol=onsoctcp;CLIENT_LOCALE=ja_jp.sjis-s;DB_LOCALE=ja_jp.sjis-s;EnableScrollableCursors=1", "user", "password"); 14 $sql = "SELECT 商品名 AS A FROM 商品M"; 15 $sql_sjis = mb_convert_encoding($sql, "SJIS-win", "UTF-8"); 16 $stmt = $db->prepare($sql_sjis); 17 $stmt->execute(); 18 19 $item_list = $stmt->fetchAll(); 20 mb_convert_variables("UTF-8", "SJIS-win", $item_list); 21 22 } catch (PDOException $e) {} 23 24 return $item_list; 25}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/08 06:38