- ベストアンサー
PHPExcelで日本語(漢字)ファイルが読めない
- PHPExcelで日本語(漢字)ファイルが読めないというエラーが発生しています。
- ひらがなとカタカナは読み込めるが、漢字ではファイルが存在しないか読み込めないエラーが発生しています。
- mb_convert_encodingを使用しても解決できません。対応方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = SJIS mbstring.encoding_translation = Off mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII mbstring.substitute_character = none; mbstring.script_encoding= Shift_JIS すみません、これらをよくみると、 mbstring.http_output = SJIS ってなっているということは、画面が遷移して、ページがレンダリングされるたびに、 すべての出力がSJISになります。 にもかかわらず、 mbstring.http_input = pass となっているので、POSTされて受け取った値はすべてSJISで渡されてきてしまうと思います。 これは、両方共「pass」にしたほうが良いです。 また、mbstring.script_encodingにかんしても、ドキュメントがなかったりして何をやっているかよくわからないので 出来ればコメントアウトしてしまうのが無難かなと。 ※私の場合は、mbstring関連の項目はすべてデフォルトのままです(つまり全部コメントアウト)。 基本的に自分の書いているスクリプトで各エンコーディングを行ったほうが、別の環境で実行した場合でも問題が起こりづらい。 それらを設定した上、一度XAMPPを再起動させてみて、現象が発生するか確認されたほうが良いと思います。 HTMLがSJISで記述されているなら、echoする出力全てに、mb_convert_encodingしないといけないですが。 まぁ、逆に言えば今の設定のままでも、読み込むファイル名がPOSTされた値なのであれば、mb_convert_encodingをしなければ読めそうな気がします。
その他の回答 (2)
- hogehoge78
- ベストアンサー率80% (433/539)
mb_convert_encoding($filename, 'SJIS','CP932'); ここの記述ですが、「CP932」って、SJISのことですよ。 phpファイルをUTF-8で記述しているなら、 mb_convert_encoding($filename, 'SJIS-win', 'UTF-8'); ではないですか。
補足
mb_convert_encoding($filename, 'SJIS-win', 'UTF-8'); は試してみました。 が、これだと平仮名、カナカナのファイルすら読み込めなくなってしまいます。 mb_convert_encoding($filename, 'SJIS','CP932'); ですと、平仮名、カタカナを読み込めるようになります。 一体何なのでしょうか。。 もしかしてWindowsXP(Excel97-2003)だと読み込めないのでは? という気がしているのですが。 家のWindows7(Excel2007のExcel97-2003)では漢字ファイルを読み込めます。
- yambejp
- ベストアンサー率51% (3827/7415)
これの場合「予定」以外のファイルはどうでしょうか? 有名な話shiftjisの「予」は975Cのため5C問題にひっかかります。
お礼
回答ありがとうございます。 5C問題は知りませんでした。 ただ、「予」を避けても変わりませんでした。 ソースコードはこちらです。 -------------------------------------------- set_include_path(get_include_path() . PATH_SEPARATOR . './PHPExcel/Classes/'); require_once 'PHPExcel.php'; require_once 'PHPExcel/IOFactory.php'; require_once 'MySQL.php'; $objReader = PHPExcel_IOFactory::createReader('Excel5'); $filename = "進行.xls"; $filename = mb_convert_encoding($filename, 'SJIS','CP932'); $objPHPExcel = $objReader->load($filename); -------------------------------------------------
お礼
php.iniのmbstring関連の項目をすべてコメントアウトしました。 これでもダメだったのですが、OLERead.phpのread()メソッドのis_readableをコメントアウトすると、読み込めるようになりました。 is_readableのコメントアウトだけでは読み込めなかったのでとりあえず解決はしました。 ありがとうございました。