• 締切済み

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

  • PHP
  • 回答数6
  • ありがとう数3

みんなの回答

  • 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

  • PHPでCSVデーターの表示について

    PHPでCSVデーターの表示について 教えてください。PHPでCSVデーターを表示したいのですが一覧表示ではなくテキストをクリックして特定のデーターを表示させようと考えております。 CSVデーターの中身(CSV.csv) 一郎,男,20歳 二郎,男,22歳 一子,女,24歳 二子,女,26歳 --data.php-- <?php $csvFile = 'CSV.csv'; $tempCSV = file_get_contents($csvFile); $tempCSV = mb_convert_encoding($tempCSV,'utf-8','SJIS-win'); $fp = tmpfile(); fwrite($fp,$tempCSV); rewind($fp); setlocale(LC_ALL,'ja_JP.UTF-8'); while ($arr = fgetcsv($fp,1024)) { list ($name,$sex,$age) = $arr; echo '<p>',<a href="01.php">' . $name . '</a>','</p>'; } fclose($fp); function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?> 一郎をクリックしたら一郎のデーターだけを(01.php)で表示させたいのですがよく分りません。 01.phpは今のところ一覧表示されるものを置いてあります。 --01.php-- <?php $csvFile = 'CSV.csv'; $tempCSV = file_get_contents($csvFile); $tempCSV = mb_convert_encoding($tempCSV,'utf-8','SJIS-win'); $fp = tmpfile(); fwrite($fp,$tempCSV); rewind($fp); setlocale(LC_ALL,'ja_JP.UTF-8'); while ($arr = fgetcsv($fp,1024)) { list ($name,$sex,$age) = $arr; echo '<table border=1>'; echo '<tr>'; echo '<td>','名前','</td>'; echo '<td>'.$name.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>','性別','</td>'; echo '<td>'.sex.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>','年齢','</td>'; echo '<td>'.$age.'</td>'; echo '</tr>'; echo '</table>'; } fclose($fp); function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?> 本を読んだり、ググったりしてヒントになる様な物を探しているのですが中々見つかりません。 初心者で申し訳ありませんが、どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • htmlで作成したフォームにcsvファイルのデータを表示するには

    <?php //ファイルを開く $fp = fopen('maillog.csv', 'r') or die('ファイルが開けません'); //テーブルを出力 echo '<table border="0">'; echo '<tbody>'; while ($field_array = fgetcsv($fp, 4096, ',', '"')) { echo '<tr>'; foreach ($field_array as $key=>$value) { if(!in_array($key,Array(0,1,2,3,4,5,6,7))) continue; echo '<td nowrap>'.htmlspecialchars($value, ENT_QUOTES).'</td>'; } echo '</tr>'; } echo '</tbody>'; echo '</table>'; //ファイルを閉じる fclose($fp); ?> 簡単な一覧は、できるのですが 下記、フォームに対してデータの一覧を表示するには どうすれば良いのでしょうか? 教えてください

    • 締切済み
    • PHP
  • PHPでcsvファイルを一覧表示するにはどうすれば良いのでしょうか?

    <?php //ファイルを開く $fp = fopen('maillog.csv', 'r') or die('ファイルが開けません'); //テーブルを出力 echo '<table border="1">'; while ($field_array = fgetcsv($fp, 10000, ',', '"')) { echo '<tr>'; foreach ($field_array as $value) { echo '<td>'.htmlspecialchars($value, ENT_QUOTES).'</td>'; } echo '</tr>'; } echo '<table>'; //ファイルを閉じる fclose($fp); ?> プログラムだと、全ての項目が表示されてしまうので 少ない項目(3~4つ)で表示できるにはどうすれば良いのでしょうか? また、各項目毎のタイトルも付けたいのですが お願いします。

    • 締切済み
    • PHP
  • CSVデータを使ったページングとソート

    phpをやり始めて3ヶ月くらいですが、高度な事がまだまだわかりません。どなたかお知恵を拝借願えないでしょうか? fgetcsvを使って一覧表示をしidからそのデータの詳細をsyousai.phpへ送って表示するようにしています。 この一覧表示にページングとソート機能をつけたいのですが、どうやったらよいかわかりません。 <? $fname = "list.csv"; $file = fopen($fname, "r"); while (list( $data0, $data1, $data2, $data3, $data4) = fgetcsv($file, 1000, ",")) { ?> <table> <tr> <td> <form action="syousai.php" method="get" name="code"> <a href="syousai.php?id=<? echo $data0;?>" name="id">詳細</a> </form> </td> <td>番号:<? echo $data0;?></td> <td>名前:<? echo $data1;?></td> </tr> </table> <? } ?> <? fclose($file); ?> と、言うようなソースです。 こんなやり方でいいのかも不明ですがこの中にページングとソートの機能を追加したいと思っています。

    • ベストアンサー
    • PHP
  • phpで読み込んだcsvが文字化けします

    PHPでCSVよ読み込んで名簿を作っています。 出力まではうまくいったのですが、なぜか一字だけ文字化けしてしまいます。(「務」→「冶」になってしまいます) 普段あまりプログラムはしないので、原因がわからず困りはてております。よろしくお願いいたします。 PHP部分の記述は以下になります。 ――――――――――――――――――――――――――――――――――― <?php $fname = "csv/meibo.csv"; $file = fopen($fname, "r"); $nowrap = "nowrap=\"nowrap\""; $tcent = "class=\"center\""; $tbg = "class=\"even\""; while (list($name, $post, $add, $add2, $tel, $http, $url, $mail) = fgetcsv($file, 1000, ",")){ $name = strtr($name, "﨑", "崎"); $add2 = strtr($add2, "﨑", "崎"); $tline ++; if($tline % 2 == 0){ echo "<tr $tbg>\n"; }else{ echo "<tr>\n"; } echo "<td $nowrap>$name</td>\n"; echo "<td $tcent>$post</td>\n"; echo "<td>$add<br />$add2</td>\n"; echo "<td $tcent>$tel</td>\n"; if($http == "http://"){ echo "<td $tcent><a href=\"$http$url\" target=\"_blank\"><img src=\"img/common/img_hp.gif\" alt=\"HPへ\" width=\"16\" height=\"16\" /></a></td>\n"; } else { echo "<td $tcent>&nbsp;</td>\n"; } echo "<td>$mail</td>\n"; echo "</tr>\n"; } fclose($file); ?> ――――――――――――――――――――――――――――――――――― PHP4を利用。 .phpのcharsetはShift_JISで、同じくShift_JISで保存しています。 CSVファイルはエクセルで作りShift_JISで書き出しています。

    • ベストアンサー
    • PHP
  • CSVファイルを読み込んで表示するPHP

    <?php setlocale(LC_ALL, 'ja_JP'); if( $handle = fopen( 'data.csv', 'r' ) ){ echo '<table border=1 cellspacing=0 bordercolor=#ff6600 align=center>'; if( ( $data = fgetcsv( $handle ) ) !== FALSE ){ echo '<tr style="background-color:#FFCCFF">'; for( $i = 0; $i < count( $data ); $i ++ ){ if($i===0){ echo '<td align=center width=160px>' . $data[$i] . '</td>'; }else{ echo '<td align=center width=60px>' . $data[$i] . '</td>'; } } echo '</tr>'; } while( ( $data = fgetcsv( $handle ) ) !== FALSE ){ echo '<tr>'; for( $i = 0; $i < count( $data ); $i ++ ){ echo '<td align=center>' . $data[$i] . '</td>'; } echo '</tr>'; } echo '</table>'; } fclose($handle); ?> ■data.csvの内容 品名,数量,予備 AAA,1,1 BBB,1,1 CCC,1,1 上記のPHPは2列まで表示されるようになっています。 それを3列まで表示できるようにしたいのですが、 初心者なので、どう記述したらいいのか分かりません。 どうか、ご教授お願いします。

    • ベストアンサー
    • PHP
  • PHPとCSVで簡易データベースなるものを作りたいのです

    私はプログラミングなどに関しては全くの素人なのですが、 今回こちらのサイト様(http://affiliate.aki-f.com/prog/cat/cat9.html)を参考にして簡易データベースなるものを作ろうと思っています。 ですがやはり付け焼刃の知識ではどうにも先が見えなく困っています。 今回が初投稿なのですが何卒宜しくお願いいたします。 以下に各ソースと質問を書かせていただきます。 ------------------------CSVの中身------------------------ 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 ~同じ用に数十件ほど~ 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 ------------------------------------------------------------- 同じカテゴリー、発売年、おすすめ度などで絞込み表示するような形を想定しています。 ------------------------------INDEX.PHP------------------------ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"></head> <body> <table> <tbody> <?php $Data=file('list.csv'); for($i=1;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]) ?> <tr> <td><a href="test.php?id=<?=$line[0]?>"><?=$line[0]?></a></td> <td><a href="test.php?id=<?=$line[1]?>"><?=$line[1]?></a></td> <td><a href="test.php?id=<?=$line[2]?>"><?=$line[2]?></a></td> <td><a href="test.php?id=<?=$line[3]?>"><?=$line[3]?></a></td> <td><a href="test.php?id=<?=$line[4]?>"><?=$line[4]?></a></td> <td><a href="test.php?id=<?=$line[5]?>"><?=$line[5]?></a></td> </tr> <?php } ?> </tbody></table></body></html> ---------------------------------------------------------------- index.phpでは全商品のリストが表示されます。 ---------------------------test.php----------------------------- <?php $id=$_GET['id'] ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"></head> <body> <table> <tbody> <?php $Data=file('list.csv'); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($line[/*質問1*/]==$id){ ?> <tr> <td><a href="test.php?id=<?=$line[0]?>"><?=$line[0]?></a></td> <td><a href="test.php?id=<?=$line[1]?>"><?=$line[1]?></a></td> <td><a href="test.php?id=<?=$line[2]?>"><?=$line[2]?></a></td> <td><a href="test.php?id=<?=$line[3]?>"><?=$line[3]?></a></td> <td><a href="test.php?id=<?=$line[4]?>"><?=$line[4]?></a></td> <td><a href="test.php?id=<?=$line[5]?>"><?=$line[5]?></a></td> </tr> <?php } } ?> </tbody></table></body></html> --------------------------------------------------------------- index.phpで選択された項目で絞り込んで表示するページです。 質問1 上記の、if($line[~]==$id)の、~の部分に例えば0と入っているなら商品カテゴリーを選択した時に同じカテゴリーで絞り込み表示するわけなのですが、これだけでは当然他の項目を選択しても何も表示されません。なので、~の部分に全ての$lineを巡回させるような命令を書ければ全項目での絞り込みに対応できるんじゃないかなと、素人ながらに思っているのですがどうでしょうか?またその方法、もしくは他の解決策をご教授願えますでしょうかm(_ _)m あと、index.phpとtest.phpを1つにまとめてしまえることはできるでしょうか?私としてはできるならそうしたいのです。が、うまくできませんでした。 どこか変なことを口走っているかも知れませんがご容赦ください。 宜しくお願いします。

    • 締切済み
    • PHP
  • PHPファイルとテンプレートファイルの書き方

    <?php // ファイル名 $fname = "test.csv"; // ファイルを開く $file = fopen($fname, "r"); // 全データを出力する while (list($id, $name, $add) = fgetcsv($file, 1000, ",")) { echo "<hr>"; echo "<br>ID:".$id; echo "<br>名前:".$name; echo "<br>住所:".$add; } // ファイルを閉じる fclose($file); ?> <質問> 上の内容をSmartyを使ってPHPファイルとテンプレートファイルに分離したい。 テーブルにCSVファイルのデータが入るようにしたい。 PHPファイルとテンプレートファイルの書き方を教えてください。

    • 締切済み
    • PHP
  • PHPでMySQLにデーターを追加するところで壁に当たってしまいました

    PHPでMySQLにデーターを追加するところで壁に当たってしまいました。 PHP5.3&MYSQL5.1 1.フォームへ入力 2.確認画面 3.MySQLへデーター追加 1.form <html> <head><title></title></head> <body> <form method="post" action="conf.php"> <table> <tr><th>番号</th><td><input type="text" name="id" /></td></tr> <tr><th>タイトル</th><td><input type="text" name="title" /></td></tr> <tr><th>テキスト</th><td><textarea name="cont" cols="40" rows="5" /></textarea></tr> <tr><th>日付け</th><td><input type="text" name="update" size="10" /></td></tr> </table> <input type="submit" value="送信" /><input type="reset" value="リセット" /> </form> </body> </html> 2.確認画面 <html> <head><title></title></head> <body> <table> <tr><th>番号</th><td><?php echo htmlspecialchars($_POST["id"]) ?></td></tr> <tr><th>タイトル</th><td><?php echo htmlspecialchars($_POST["title"]) ?></td></tr> <tr><th>テキスト</th><td><?php echo htmlspecialchars($_POST["cont"]) ?></td></tr> <tr><th>日付け</th><td><?php echo htmlspecialchars($_POST["update"]) ?></td></tr> </table> <form method="post" action="upld.php"> <input type="hidden" name="did" value="<?php echo htmlspecialchars($_POST["id"]) ?>" /> <input type="hidden" name="title" value="<?php echo htmlspecialchars($_POST["title"]) ?>" /> <input type="hidden" name="cont" value="<?php echo htmlspecialchars($_POST["cont"]) ?>" /> <input type="hidden" name="update" value="<?php echo htmlspecialchars($_POST["update"]) ?>" /> <input type="submit" value="登録" /> </form> </body> </html> 3.MySQLへデーター追加 <?php $Con = mysql_connect("localhost","root",""); if ($Con == false) {dir ("MySQLの接続に失敗。");} if (!mysql_select_db("phpdata",$Con)) {dir ("データーベース接続に失敗。");} $sql = "insert into daimoku(id,title,cont,update) values('".$_POST["id"]."','".$_POST["title"]."','".$_POST["cont"]."','".$_POST["update"]."')";//SQL文の作成 $res = mysql_query($sql) or die(mysql_error());//クエリの実行 mysql_close($Con);//切断 ?> <html> <head> <title></title> </head> <body> <p>ご登録ありがとうございました。</p> <a href="01.php">戻る</a> </body> 以上のコードでデーターの追加が出来ません。 どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • ファイルの内容が表示できるか?

    外部ファイルでお願いします。 参照ボタンから、何でもいいのでファイルを選びます。ファイル名がテキストボックスに表示されます。 下にあるYESボタンを押すと、その下にコメントアウト してあるテキストボックスが上記のID,ファイル名に追加されテキストボックスの中に参照ボタンから選んだ ファイルが挿入される。また、左のNOボタンを押すと その列が削除されるというやり方は可能でしょうか? <html> <head> <title>画面</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <table> <col width="100"> <col width="100"> <tr> <td> <input type="file" name="file"size="50"> </td> </tr> </table> <table border ="1"> <col width="50"> <col width="200"> <tr> <th>ID</th> <th>ファイル名</th> </tr> </table> <input type="button" name="yes" value="YES"value="" > <!-- <table border="1"> <col width="50"> <col width="200"> <tr> <td><input type="button" name="no"value="NO"value="" ></td> <td><input type="text" name="file" size="40" value=""></td> </tr> </table> --> </body> </html>