• 締切済み

phpとoracleを用いたシステムでの文字化け

phpとoracleを用いたシステムでwebサイトを構築しているのですが、 ブラウザからアクセスしページ表示した際に、全角文字が文字化けしてしまいます。 ◆環境 webサーバ:apache, php, oracleClient, PDO_OCI DBサーバ:oracle DBデータアクセス方法:PDO ◆事象の詳細 文字化けといっても必ず ???? とクエスチョン続きで表示されます。 上記webサーバのコマンドラインでphpのバッチを実行したところ、 コマンドライン上では正常に全角文字が表示されます。 まったく同じバッチをwebブラウザからhttpでアクセスを行ったところ、 文字化けしてしまいます。 ブラウザでの表示が悪いのではと思い、 phpのバッチ実行時に結果をテキスト出力させる処理を追加したのですが、 コマンドラインで実行した際は正常に出力され、ブラウザでアクセスした際は内容が文字化けして出力されました。 上記事象からアパッチが影響してるのではと考えられるので、 webサイトごと個別のhttpd.confの設定ファイルに NLS_LANG を設定したのですが、 結果は変わりませんでした。 文字コードの指定がない(正しくない)から文字化けするというよりは DBサーバから取得する文字列をどう受け取って(扱って)いいのかわからないという感じがします。 何か解決策等、わかる方がいましたらご教授いただけますでしょうか。

  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

PDO_OCIならDSNで文字セット指定がありますよね?それは何を指定していますか? http://php.net/manual/ja/ref.pdo-oci.connection.php >???? >とクエスチョン続きで表示されます。 表示している文字列データがSJIS(cp932)で、ブラウザがutf-8などと認識していたりはしないんですかね。 #コマンドラインはcp932 onlyですから >文字コードの指定がない(正しくない)から文字化けするというよりは この可能性を除外するためには「ブラウザ側のエンコードをどう変えても同じ化け方になる」ことを確認しないといけませんが、それは確認済みということでいいでしょうか? という内容を他所(http://www.phppro.jp/qa/4604)で書きました。こちらにまとめます(あちらではレスしません)のであしからず。

hsmt8
質問者

補足

ご回答ありがとうございます。 >PDO_OCIならDSNで文字セット指定がありますよね?それは何を指定していますか? 上記については以前EUCを指定していましたが、どの文字コードを指定しても「????」となるため、 現在は指定しておりません。 設定をいくつか変えましたので、再度設定を行って確認してみます。 >この可能性を除外するためには「ブラウザ側のエンコードをどう変えても同じ化け方になる」ことを確認しないといけませんが、それは確認済みということでいいでしょうか? HTML上のcharset、putenvでの文字コード(NLS_LANG)指定、ブラウザの機能を利用してのエンコードぐらいであれば確認しました。Shift-JIS,EUC,UTF-8のどれに変えても???という表示でした。 >表示している文字列データがSJIS(cp932)で、ブラウザがutf-8などと認識していたりはしないんですかね。 ソースファイル、サーバのNLS_LANG設定、表示ページのcharset、DBのcharsetはすべてEUCに統一しています。 また、ブラウザ表示前に文字列の文字コードをphp関数で表示させたときも「EUC-JP」で返ってきました。 「ブラウザの認識」について、上記方法以外に確認した方がいい点がありましたら教えていただけますでしょうか。

回答No.1

こんにちは。 DBの文字コードやPHPの設定、PHPスクリプトを記述しているファイルの文字コードなど環境に依存するいくつか原因が考えられますので一概には言えないのですが、差しあたって以下の点を確認してみるといかがでしょうか。 (1) php.iniでdefault_charsetを設定 php.iniで指定するパラメータのdefault_charsetでは、既定の文字コードを指定することができます。デフォルトではコメントアウトされていると思いますのでコメントを外して任意の文字コードを指定します。例えばutf-8を指定する場合は以下のようになります。 ○デフォルトの設定 ;default_charset = "iso-8859-1" ○変更後の設定 default_charset = "utf-8" (2) スクリプトの先頭でheader関数を実行 スクリプトの先頭でheader関数を実行して文字コードを指定することでデバッグし、問題の切り分けします。Httpレスポンスの出力時の問題ならばこちらで解消されるかもしれません。以下、UTF-8の場合です。 <?php header("Content-Type: text/html; charset=UTF-8"); echo "テスト"; ?> ご参考になれば幸いです。

hsmt8
質問者

補足

ご回答ありがとうございます。 >(1) php.iniでdefault_charsetを設定 php.iniに関しましては同サーバの他システムが影響してしまうため、変更ができません。 ただwebサイトごとに設定を指定できるconfファイルで、phpの設定を個別で書くことができるようなので、そちらで試してみます。 >(2) スクリプトの先頭でheader関数を実行 本事象のHTTPアクセスで文字化けするものは、DBへアクセスし取得した全角文字のみでした。 phpソース内で書いた全角文字は正常に表示されています。

関連するQ&A

  • PHP4からPHP5にしたときのDB文字化けについて

    よろしくお願い致します。 すでに、PHP4で作っていたサイトで、DBにもいろいろと登録していたのですが、PHP5にしたい事情が出てしまい、PHP5にしました。 すると、すでに登録されていた、DBの内容が文字化けしてしまいました。 PHP4(UTF8)+MySQL5(UTF8) → PHP5(UTF8)+MySQL5(UTF8) 情報足りませんでしたら申し訳ないです、申し付けて下さい。 phpMyAdminから見たときは、すでに入っていたDBの内容は文字化けはしていないのですが… 次にPHP5で新しく登録した場合は、サイトでの表示は文字化けしないのですが、次はphpMyAdminで見ると文字化けしていました。 php.iniの設定も同じにしてます、Apacheのconf設定なども見たのですが、文字化けは解消しませんでした。 よろしくお願い致します。

    • 締切済み
    • PHP
  • 文字化けについて

    基本的な質問で申し訳ありませんが、xamppで一括インストールをしてapacheサーバを立てて C:\apachefriends\xampp\htdocs\web_cartにphpファイル、htmlファイルをアクセスしたところ、実行されているのですが文字化けしており、ブラウザの「表示」→「エンコード」を見ると西ヨーロッパ言語(ISO)になっています。ここの設定は日本語(シフト JIS)にしたいのですが、どこを設定したらよいのでしょうか? どなたかアドバイスお願いします。

    • ベストアンサー
    • PHP
  • 自分で書いたPHPスクリプトが、文字化けしてる

        テキストエディタでPHPのスクリプトを書いて サーバにアップしてブラウザで表示すると、文字化けしてしまいます。 手動でブラウザのエンコード設定をしなおすと正常に表示されるんですが ページ更新したらデフォルトで文字化けしてます。 PHPスクリプトを書いて、アップロードしてブラウザで表示する時に 文字化けしないようにするには、どうすればいいのでしょうか? 以下のコードは書いていますが、文字化けします↓ <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">    

    • ベストアンサー
    • PHP
  • Mysqlの文字化けについて

    現在さくらのレンタルサーバを使用しています。 MysqlをPDOからアクセスしているのですが、日本語入力をすると文字化けしてしまいます。 検索した結果、文字コードの問題が多く報告されていたため、 以下のサイト等を参考に、PHPMyAdminで文字コードをutf8_general_ciにして PDOでも文字コードをutf8にしてみました。 しかしながら、PDOから日本語をinsert等するとDB上で「??」が表示されてしまします。 http://d.hatena.ne.jp/sdhr/20100806/1281095806 非常に困っているので、どなたか解決策をご存知でしたらご教授お願い致します。

    • ベストアンサー
    • MySQL
  • PHPファイル文字化けについて

    linux CentOS3(RedHat Enterprise3)を利用しています。 linuxは文字コードがEUCと認識しております。 そこでwindows上にてPHPファイルを作成、文字コードEUCにて保存し、 ffftpにてlinuxサーバにアップロードし、webページを参照してみました。 PHPファイルは以下の通りです。 <?php echo "こんにちは"; ?> 結果、InternetExplorerを利用し閲覧したところ文字化けにて表示されます。 文字コードは「UTF-8」が選択されています。 もちろん、文字コードを「EUC」に変更すると、 出力されてほしい文字列が表示されます。 これをInternetExplorerにて表示したとき、 文字化けしないような設定に変更したいと考えます。 どのような手順を踏めばよろしいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • php+MySQLで文字化け

    MySQLに漢字のデータが入っています コマンドプロンプトで show title from board などとやると、漢字が表示されます phpを介してtitleなどを表示させると 文字化けします phpの中でecho ”漢字”などやると ちゃんと、漢字が表示されます WindowXPで実行です よろしくおねがいします

    • ベストアンサー
    • PHP
  • ajaxを使用した場合にPHP出力文字の文字化け

    サーバー側をPHPにしてajaxシステムを作ろうと思っています。 サーバからのデータ取得時にResponseTextを使用しており、ブラウザの表示での文字化けで困っています。 WinXP SP2 IE6.0では、UTF-8なら表示できますがEUC-JPは文字化けします。 しかし、Win2K IE5.0とWinX PSP1 IE6.0では、UTF-8は文字化けし、EUC-JPなら表示されます。 こっちを立てればあちらが立たずという状況で困っています。 また、直接XMLファイルやテキストファイルを作成し、これを読み込むと どのパソコンでも表示することができました。 phpから出力した文字がうまい具合に読めないのです。 ちなみにRespondeXMLを使用する場合、 XMLファイルを直接読み込むと内容を取得できるのですが、 PHPから出力したXMLデータを取得すると何も表示されません。 いい解決方法はないでしょうか。よろしくお願いいたします。 サーバシステム fedoraCore3 Apache 2.0 PHP 4.3.11 php.iniの文字コード設定はEUC-JP用にしています。

  • PHP+MySQLで文字化け

    DBからデータを持ってきてPHPで表示させると文字化けしてしまいます。 PHPはEUC-JPです。 mb_convert_encoding($message, "EUC-JP")としてみても文字化けしてしまいます。 どなたか対処方法教えていただけたら嬉しいです。

    • 締切済み
    • PHP
  • ブラウザーで日本語が文字化けする(PHP+MySQL)

    以下の現象に対処したいのですが、どうすればいいか弱っています。 (1) phpMyAdminからSQLでテーブルに日本語を挿入して、 PHPプログラムでブラウザー表示すると文字化け(?????で表示)する。 phpMyAdminでこのデータを表示すると、正しく日本語表示されている。 (PHPプログラム内で直接日本語データを記述して挿入しても同じ現象となる) (2) ブラウザーで日本語を入力してPHPプログラムで受取りMySQLに出力して、 そのデータをPHPプログラムでブラウザー表示すると問題なく日本語が表示される。 phpMyAdminでこのデータを表示すると、文字化け(ぐじゃぐじゃの文字で表示)する。 利用しているホスティングサービスは、お名前・COMのVPSプラン 実行時の環境 MySQL: サーバのバージョン: 5.0.77 サーバ: Localhost via UNIX socket MySQL の文字セット: UTF-8 Unicode (utf8) MySQL の接続照合順序: utf8_unicode_ci PHP : PHP5を使用 phpプログラムは、UTF-8で記述。 出力されるHTMLの文字セット <meta http-equiv="Content-type" content="text/html; charset=utf-8" />

    • ベストアンサー
    • PHP
  • 文字コードEUCのPerlプログラムが文字化けしてしまいます

    Perlで書かれたCGIを実行しようとしているのですが、プログラムはEUCで記述されているそうです。nkf -g ***とするとEUC-JPとなります。 print " <META http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">\n"; とも記述されているのですが、ブラウザで実行(閲覧)すると文字化けして、ブラウザのエンコードは、Unicode(UTF-8)になっています。 ちなみに、OSはCentOS5.2です。 どうやったら、EUCで記述されたCGIが文字化けせずに実行できるのでしょうか? teratermでサーバに接続語、viコマンドで表示しても文字化けしています。ファイルの文字コードをEUCからUTF-8にして(nkf -w ***)、ブラウザでアクセスしても文字化けしてしまいます。

    • ベストアンサー
    • Perl