• 締切済み

PHPでCSVファイルのデータを表示したところ日本語が表示されません

PHPで、CSVファイルの中身を表示させようと思ったのですが、一部の日本語が正しく表示されません。 問題のPHPとCSVファイルの内容を明記します。アドバイスお待ちしております。 PHP <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>tokuten</title> </head> <body> <TABLE border="1"> <TBODY> <TR> <TD>ID</TD> <TD>名前</TD> <TD>点数</TD> </TR> <?php $fname = "name.csv"; $fp = fopen($fname, "r"); while (list($id, $name, $point) = fgetcsv($fp, 100, ",")) { echo"<TR>"; echo"<TD>".$id; echo"</TD>"; echo"<TD>".$name; echo"</TD>"; echo"<TD>".$point; echo"</TD>"; echo"</TR>"; } fclose($file); ?> </TBODY> </TABLE> </body> </html> CSV 1,a,50 2,b,70 3,c,100 55,松井,55 530000,フリーザ,530000

みんなの回答

  • world99
  • ベストアンサー率64% (20/31)
回答No.6

補足で、記述されてましたphp.iniの設定で試した所、 私のPCでは、プログラムファイルとCSVファイルをEUC-JPで、 保存した場合に、文字化けせずに日本語が表示されました。 もし、上手くいかないようであれば、 プログラムファイルの最初に以下の記述を追加してみて下さい。 <?php header("Content-Type: text/html;charset=EUC-JP"); ?> あと、mb_convert_encoding()という関数もありますよ。 ■php.ini default_charset = neutral mbstring.language = neutral # 西欧諸語を扱う「ISO-8859-1」(Latin-1) mbstring.internal_encoding = ISO-8859-1 mbstring.http_input = pass mbstring.http_output = pass

  • taaaaaaa
  • ベストアンサー率38% (31/80)
回答No.5

文字コードを指定して保存出来るエディタソフトを用意する。 ぼくはTeraPadを利用しています。 で、2つを試す。 1)Shift-JIS PHPプログラム、CSVファイルをShift-JISで保存する。PHPの出力(metaタグ)をShift-JISにする。 2)EUC PHPプログラム、CSVファイルをEUCで保存する。PHPの出力(metaタグ)をEUCにする。 ちなみにレンタルサーバは日本の会社ですか? それとも海外ですか?

zemi2006
質問者

補足

ありがとうございます。TeraPadを用意して早速試してみました 1)「松井」が出ず「フリーザ」が「tリーザ」になるという最初の症状が出ました 2)全てEUCにして試してみると余計に文字化けがひどくなってしまいました・・・ レンタルサーバは無料のtok2さんを利用しています。

  • world99
  • ベストアンサー率64% (20/31)
回答No.4

以下の事を確認して下さい。 (1)php.iniの文字エンコード設定  ※希望設定環境に合わせてEUC-JPをSJISに読み替えて下さい。 [PHP] default_charset = "EUC-JP" [mbstring] mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = EUC-JP (2)PHPファイル、CSVファイルの文字エンコード種類が、  上記(1)の設定と一致しているか。

zemi2006
質問者

補足

(1) phpinfo();で確認しました。 default_charset = neutral mbstring.language = neutral mbstring.internal_encoding = ISO-8859-1(Loval Value) no value(Master Value) mbstring.http_input = pass mbstring.http_output = pass (2) PHPファイルの文字コードはSHIFT_JISになっています。試しにEUC-JPにすると名前、点数の文字も文字化けしました。 ・・・CSVファイルの文字エンコード種類はどのように確認すればよいのでしょうか?質問ばかりで申し訳ありませんがご享受願います。

  • taaaaaaa
  • ベストアンサー率38% (31/80)
回答No.3

PHPは環境やバージョンによって違いが大きいので確認することをおすすめします。 ・レンタルサーバの設定条件は? ・バージョンは? 文字コードや拡張子の使用条件などがある場合もあります。

zemi2006
質問者

補足

回答ありがとうございます。 レンタルサーバのバージョンは3で、設定条件は明記されていなかったため分からなかったです・・・ PHPは使え、CSVファイルも数字の部分は読み込んでいるので恐らく大丈夫とは思うのですが・・・

  • nebel
  • ベストアンサー率37% (117/308)
回答No.2

#1様が指摘されているところを除いて問題ないように思えます。 実際にその部分だけ修正し、実行してみましたが、何ら問題はありませんでした。 どの日本語文字がどのように問題があるのでしょうか? ブラウザの文字コードがSHIFT-JISになっていないだけとかではないですよね?

zemi2006
質問者

補足

回答ありがとうございました。 問題箇所は、「松井」の文字がテーブル内で空欄になっており、「フリーザ」の部分が「tリーザ」になってしまいます。 ブラウザの文字コードも確認しましたが、SHIFT-JISになっていました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

fclose($file); が fclose($fp); 以外は特に問題ないと思います。

zemi2006
質問者

補足

ありがとうございます、修正致しました しかし残念ながら問題箇所は直りませんでした・・・

関連するQ&A