CSV形式のデータを表示すると文字化けする - PHPプロ!Q&A掲示板

510

  • 0P

CSV形式のデータを表示すると文字化けする

質問日時 / 2007年5月22日 09:33    回答数 / 4件

Questioner:  toichi  このエントリーをはてなブックマークに追加 

キーワード / CSV    文字化け   

 初めて投稿させていただきます。
Excel経由のCSVファイルの中身を表示するとき、日本語のところが文字化けしてしまいます。
例えばCSVでは
1,三沢,300
2,川田,400
のようなデータが記載されていて、下記のようなコードで実行すると文字化けしてしまいます。

  1. <?php
  2. $fname = "./data/test.csv";
  3.  
  4. $file = fopen($fname,"r");
  5.  
  6. while ($array = fgetcsv($file1024,",")) {
  7.   echo "<hr>";
  8.   for ($i = 0$i < count($array)$i++) {
  9.     echo mb_convert_encoding($array[$i],"EUC-JP","SJIS")."<br>";
  10.   }
  11. }
  12.  
  13. fclose($file);
  14. ?>

結果
1
O沢
300
2
K田
400

というような日本語の先頭だけ文字化けしてしまいます。
CSVデータの日本語の部分を「"」で囲うと文字化けはしないです。
しかし、ユーザーの要望で「"」なしでも読み込みできるようにしてほしいとのことで悩んでいます。

ご教授お願い致します。

環境
OS:Linux
WEBサーバー:apache2
文字コード:EUC-JP

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01asuncion当方(Windows2000, PHP5.2.2, Apache2.0.59)では
┃┗A01-1toichi 早速の回答どうもありがとうございます。 質問の
┗A02pascal以下に同様の質問があるので、確認してみてください。
 ┗A02-1toichi 文字化けなくなりました!! 最初、setlocale(LC_A

回答一覧

並び替え:

A01
answererasuncion [5月22日 11:28] (最終編集:5月22日 11:29)

当方(Windows2000, PHP5.2.2, Apache2.0.59)では
文字化けせずに正しく出力できましたので、
文字コード関連の設定の問題ではないかと思います。

EUC-JPをお使いとのことですが、念のため以下の項目について教えていただけますか?
・入力CSVファイルの文字コード(SJISですか?)
・スクリプトの文字コード(今回は、これはあまり関係ないかもしれません)
・php.iniの[mbstring]セクションで設定している、「mbstring.何とか」のすべての内容

この意見に回答する

ツリーへ TOPへ

A01-1
replyertoichi [5月22日 12:36]

 早速の回答どうもありがとうございます。

質問の回答ですが、
・入力CSVファイルの文字コード
  Shift-jisです。エクセルからCSV形式で保存しました。
・スクリプトの文字コード
  EUC-JPで保存しています。(意味違っていたらすいません。)
・mbstringの内容
 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
 mbstring.script_encoding = EUC-JP

宜しくお願い致します。

この意見に回答する

ツリーへ TOPへ

A02 満足
answererpascal [5月22日 13:07]

以下に同様の質問があるので、確認してみてください。
http://www.phppro.jp/qa/371

「ロケール設定を考慮するから」というのが原因のようです。

この意見に回答する

ツリーへ TOPへ

A02-1
replyertoichi [5月22日 13:37]

 文字化けなくなりました!!
最初、setlocale(LC_ALL, 'ja_JP');
で動かしたら、文字化けの数は減りましたが、一部文字化けがなおらなかったのですが、
yossy様の作成したfgetcsv_regだと、完全に文字化けしなくなりました。
pascal様、ありがとうございました!!

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)