- - PR -
文字化け
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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であれば表示できます。 他に確認する設定等ありますでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2007-01-28 23:48
全体が文字化けということなので、文字の入出力が問題ぽいです。
mbstring.encoding_translation = Off としたらどうなりますか?
ここはエラーが出ているのでは? display_errorはonになってますか? _________________ http://aglabo.com/ @Homepage http://furukawa-select.com/mt/ @Blog | ||||
|
投稿日時: 2007-01-29 12:40
返信ありがとうございます。
mbstring.encoding_translation = Off にしてみたのですが、日本語は?になります。 php.iniで設定はしていました。 display_errors = On よろしくお願いします。 | ||||
|
投稿日時: 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-29 16:44
データベースのキャラクタセットを確認しました。
下記のようになりました。 SJISです。 SQL> select * from v$nls_parameters where parameter like '%CHARACTERSET'; PARAMETER ---------------------------------------------------------------- VALUE ---------------------------------------------------------------- NLS_CHARACTERSET JA16SJIS NLS_NCHAR_CHARACTERSET AL16UTF16 以上です。 よろしくお願いします。 | ||||
|
投稿日時: 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-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に書いている日本語まで化けてしまいました。 以上です。 よろしくお願いします。 | ||||
|
投稿日時: 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 | ||||
