AS400からODBCでデータを取得して表示したら、私の環境ではSJISのためそのまま画面に表示すると文字化けする。
ソースコードなどはUTF8で統一しているため、SJIS統一はしない方針。
そのため行ごとに取り出す際、mb_convert_encodingを行っていた。convで関数化している。
しかし、$array = $st->fetchall(PDO::FETCH_ASSOC);でデータベースをそのまま配列にぶち込み、その後php_excelなどで配列のままエクセル化したいなどの処理を行いたいと思ってきた。しかし、何も処理せず、SJISのまま配列に放り込んでしまうと、吐き出すとき結局文字化けする。
そこで、調べたら、mb_convert_variables()で配列ごとを文字変換できるそうだ。
コードは
$array = mb_convert_variables(“UTF-8″,”SJIS-win”,$array);
ただし、print_r($array);で出力すると、RECURSIONとエラーっぽく表示される。
しかし、きちんと変換はされているから問題ない。foreachで吐き出してみると、きちんと変換されている。
コメント