• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CSVファイルの読み込みで日本語が出力されない!)

CSVファイルの読み込みで日本語が出力されない!

このQ&Aのポイント
  • PHPを使ってCSVファイルを部分的に読み込むコードを教えてもらいましたが、日本語が出力されず空白のままでした。
  • 解決策がわかりません。日本語も出力する場合、どのように修正すれば良いでしょうか?
  • 現在のコードでは、CSVに入力された英語や数字は出力されますが、日本語の出力に問題が生じています。どのように修正すればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

文字コードについては以下の3つを気をつけてください。 ・スクリプトを記述している文字コード ・外からやってくるテキストデータ(インプットされるデータ)の文字コード ・画面に表示するテキストデータ(アウトプットされるデータ)の文字コード 鉄板の処理は、 (1)インプットデータ取得時にまとめてスクリプト(を記述している)の文字コードにコンバート。 (2)アウトプット直前にアウトプットの文字コードにまとめてコンバート。 です。 例えば質問のコードがutf8で記述されているとすると、 while($data = fgetcsv($handle, 1000, ","))の後で、$dataの文字コードチェックし、 utf8じゃなければutf8にコンバートしてください。 getcsvの戻り値は配列なのでforeachで回してください。 foreach($data as $k => $v) $data[$k] = mb_convert_encoding($v, "utf8"); 前回の回答と同じく上記コードは試してないので動かないかもしれません。 foreachを使わずにarray_mapとcreate_funcを使う方法もあるけど、ちょっと難しいかも。 また、上記は元の文字コードチェックはしていません。 それでうまくいかない場合はphp.iniのmb絡みの設定を見直したり、 mb_detect_encodingとかを組み合わせてみてください。 今回はスクリプトにHTMLが記述されている、つまりアウトプットの文字コードとスクリプトの文字コードが同じです。 なので、スクリプトの文字コードであるutf8に変換したらそのままアウトプットしても問題ありません。 ただ、htmlの文字コードを正しく指定してあげてください、<meta charset="utf-8">などです。 文字コードは色んな環境が絡んでくるのでなかなか難しいのですが日本人プログラマの宿命です。 慣れましょう。

noname#233083
質問者

お礼

ありがとうございます。 大本のhtmlファイルは次のように文字コードを設定してます。 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> なんだか、いろいろあるのですね。大変ですが、頑張ります。 今、部屋にある書籍を読み直しているところでして、PHPのいろいろな機能を、どのような場面で使えばいいのか考えているところでした。 今後とも宜しくお願い致します。

その他の回答 (1)

回答No.2

fgetcsvのマニュアルに一応書いてはあるのですが…… http://php.net/manual/ja/function.fgetcsv.php > この関数はロケール設定を考慮します。 とあるように,setlocale関数を使ってLC_CTYPEを設定し,CSVの文字コードと同じ文字コードを含むロケールを指定しておく必要があります。 http://www.php.net/manual/ja/function.setlocale.php ところが,このロケールの設定値はシステムに依存します。 また,設定値のリストをプログラムで取得する標準的な方法が無いため, システムに依存した方法で調べる必要があります (コマンド入力したり,マニュアル調べたりetc.)。 # おそらく,そのままPHPのCコード中でsetlocaleに渡されるのだと思います (標準Cのsetlocaleの設定値はシステム依存) str_getcsv関数が使えるのであれば,文字コードの変換はmb系関数を使ってしまうことで,汎用に作れるかと思います。 http://www.php.net/manual/ja/function.str-getcsv.php

noname#233083
質問者

お礼

ありがとうございます! 参考にさせて頂きます!!