- PR -

文字化け

投稿者投稿内容
クリス
会議室デビュー日: 2007/01/28
投稿数: 5
投稿日時: 2007-01-28 22:35
Oracle10gで環境構築しています。
PHP5.1.4、Apache2.0.8です。

OracleからのデータをPHPで表示すると
文字化けしてしまいます。
PHPからはPDO接続を行っています。

下記のような設定を行っているのですが、
日本語が全て文字化けしている状態です。

どの設定がおかしいのでしょうか?
よろしくお願いします。

(Oracle環境設定)
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0
export NLS_LANG=Japanese_Japan.JA16SJIS
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export ORACLE_HOME_LISTNER=$ORACLE_HOME

(PHP.INI)
SJIS output_buffering = On
output_handler = mb_output_handler
magic_quotes_gpc = Off
default_charset = Shift_JIS
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none

(Apache環境設定(envvars))
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/10.2.0
export LD_LIBRARY_PATH=/opt/oracle/product/10.2.0/lib

また、Apacheの設定に
export NLS_LANG=Japanese_Japan.JA16EUC
を追加すると、なぜか画面の表示すらできなくなってしまいます。
PHPINFOであれば表示できます。

他に確認する設定等ありますでしょうか?
よろしくお願いします。
あつしfx
大ベテラン
会議室デビュー日: 2002/04/08
投稿数: 104
お住まい・勤務地: XPできるところ
投稿日時: 2007-01-28 23:48
全体が文字化けということなので、文字の入出力が問題ぽいです。
mbstring.encoding_translation = Off
としたらどうなりますか?

引用:

また、Apacheの設定に
export NLS_LANG=Japanese_Japan.JA16EUC
を追加すると、なぜか画面の表示すらできなくなってしまいます。
PHPINFOであれば表示できます。

他に確認する設定等ありますでしょうか?
よろしくお願いします。


ここはエラーが出ているのでは?
display_errorはonになってますか?
_________________
http://aglabo.com/ @Homepage
http://furukawa-select.com/mt/ @Blog
クリス
会議室デビュー日: 2007/01/28
投稿数: 5
投稿日時: 2007-01-29 12:40
返信ありがとうございます。

mbstring.encoding_translation = Off
にしてみたのですが、日本語は?になります。

php.iniで設定はしていました。
display_errors = On

よろしくお願いします。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2007-01-29 13:27
その前にまず、データベースのキャラクタセットは何なんでしょうか?

SQL> select * from v$nls_parameters where parameter like '%CHARACTERSET';

PARAMETER VALUE
------------------------- --------------------
NLS_CHARACTERSET JA16EUC
NLS_NCHAR_CHARACTERSET AL16UTF16

_________________
もしもし@RMAN 友の会
クリス
会議室デビュー日: 2007/01/28
投稿数: 5
投稿日時: 2007-01-29 16:44
データベースのキャラクタセットを確認しました。
下記のようになりました。
SJISです。

SQL> select * from v$nls_parameters where parameter like '%CHARACTERSET';

PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
NLS_CHARACTERSET
JA16SJIS

NLS_NCHAR_CHARACTERSET
AL16UTF16

以上です。
よろしくお願いします。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2007-01-29 18:44
データベースのキャラクタセットが JA16SJIS で、NLS_LANG に JA16SJIS を
設定しているということは、Net のライブラリの中で文字コード変換は行って
いないはずです。なので、データベースにある SJIS のデータはそのまま
アプリケーションに渡されていて、アプリケーションも(というかリンクした
Net のランタイム)は SJIS のデータとして受け取っているはずだし、データ
ベースに格納するときも SJIS のつもりでデータベースに渡しているはず。
で、PHP よく分からないんですが、mbstring.internal_encoding っていう
パラメータが今 EUC-JP になっているようですが、これはこれでいいんでしたっけ?

あと念のためですが、SQL*Plus からデータは正常に参照できているんでしょうか?
(データベースに格納する時点で既に「?」に化けてしまっていた、とか)

_________________
もしもし@RMAN 友の会

[ メッセージ編集済み 編集者: もしもし 編集日時 2007-01-29 18:52 ]
クリス
会議室デビュー日: 2007/01/28
投稿数: 5
投稿日時: 2007-01-29 19:04
ご返信ありがとうございます。

SQLPLUSでSELECTさせた結果です。
それぞれ下記のように表示されます。

<SQL*PLUS>
SQL> SELECT * FROM TEST;

NO NAME
---------- ----------
1 12345
2 あいうえお
3 阿意鵜餌牡
4 アイウエオ
5 @:[@lfjga

<PHP経由>
mbstring.internal_encoding=EUC

PDO関数 ←これはPHPに書いています
1 12345
2 ?????
3 ?????
4 ?????
5 @:[?lfjga

mbstring.internal_encoding=SJISにして
Apacheを停止+起動
PDOエリソ?1123452?????3?????4?????5@:[?lfjga

PHPに書いている日本語まで化けてしまいました。

以上です。
よろしくお願いします。
あつしfx
大ベテラン
会議室デビュー日: 2002/04/08
投稿数: 104
お住まい・勤務地: XPできるところ
投稿日時: 2007-01-29 23:32
PHPのコンパイルオプションによりますが、本来はSJISでは機能しません。
なのでPHPの文字コードをEUC-JPがUTF8にしたほうがいいでしょう。

以上をふまえて、OracleでSJISできたものをEUC-JPとして使っているので文字化けしているのでPDOで取得後に文字列をmb_encoding_convertでSJIS→EUCに変換してみてください。
_________________
http://aglabo.com/ @Homepage
http://furukawa-select.com/mt/ @Blog

スキルアップ/キャリアアップ(JOB@IT)