phpでcsvの文字化けを直す方法

このQ&Aのポイント
  • PHPでcsvファイルの文字化けを解決する方法を教えてください。
  • windowsのChromeでcsvファイルが文字化けする問題の解決方法を教えてください。
  • csvファイルの文字化けを防ぐための記述方法を教えてください。
回答を見る
  • ベストアンサー

phpでcsvの文字化けを直す方法が知りたい!

<?php /* 配列の作成 */ $array = array($name, $telephone, $email); /* ファイルポインタをオープン */ $file = fopen("information.csv", "a"); /* CSVファイルを配列へ */ if( $file ){ var_dump( fputcsv($file, $array) ); } /* ファイルポインタをクローズ */ fclose($file); ?> 上記のように記載した時、windowsのchromeでみると文字化けしてしまいます。 どのような記述をすれば、文字化けしないか教えてください。

  • PHP
  • 回答数2
  • ありがとう数2

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

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

文字コードがなんだかわからんけど、適切なヘッダを出力すればいいんじゃないかな? 例えばUTF-8だったら header('Content-type: text/plain; charset=utf-8'); 文字コードは適切なのにしてね

takecY
質問者

お礼

お礼が遅くなってしまい、失礼しました。 ご丁寧に記載していただき、ありがとうございました。 無事にやりたいことができるようになりました。

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>上記のように記載した時、windowsのchromeでみると文字化けしてしまいます。 記載されたソースではfputcsvの戻り値(整数)をvar_dumpしているだけのようですが、何が化けるんでしょうか? $name などをprint していて(しているのかどうかソースからは読み取れませんが)文字化けするということなら、$name に格納されている文字列の文字セットとブラウザが認識している文字セットが違っているだけでしょ。 スクリプトの先頭で、記述している文字セットに合わせてheader()を返してやってください。 (例) header('content-type:text/html; charset=utf-8');

takecY
質問者

お礼

お礼が遅くなってしまい、失礼しました。 ご丁寧に記載していただき、ありがとうございました。 無事にやりたいことができるようになりました。

関連するQ&A

  • array をつかってcsv ファイルを作る

    もとになるcsvファイルから、いらない行を削除して新しいcsvファイルを作りたいです。 そこで、このようにしてみました。 $fptemp = fopen('data-temp.csv', "a+"); if (($handle = fopen('data.csv', "r")) !== FALSE) { while (($data= fgetcsv($handle)) !== FALSE) { if(条件){ $list = array($data); fputcsv($fptemp, $list); } } } fclose($handle); fclose($fptemp); ところが、結果の行にはすべてArray とだけ出力されます。 もとの行をそのまま出すにはどうしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • PHP5で、utf-8形式のcsvファイルを読み込む際、常にファイル内

    PHP5で、utf-8形式のcsvファイルを読み込む際、常にファイル内容の行数+1を返すようにしたいのですが、初回(ファイルの中身がないとき)がうまくいきません。どうなおせば、よいでしょうか。 ■うまく動作しないコード setlocale(LC_ALL, 'ja_JP.UTF-8'); $fp = fopen('data.csv','r'); $data = array(); while ($row= fgetcsv($fp)) { $data[] = $row; } $no = 1; if (0 < count($data)) { $no = count($data); $no++; } var_dump($no); fclose($fp); ■現在の状態 ---------------------------------------- ▽csvファイルの内容が、下記の場合 1,名前,内容 2,名前,内容 最終的なvar_dump($no);は、3 → O.K. ---------------------------------------- ▽csvファイルの内容が、下記の場合 1,名前,内容 最終的なvar_dump($no);は、2 → O.K. ---------------------------------------- ▽csvファイルの内容が、下記(中身が何もない)の場合 最終的なvar_dump($no);は、2 → × この部分を1にしたいのですが、どうすればよいでしょうか。 ---------------------------------------- また、csvファイルの内容が空の(つもりの)状態で、 var_dump($data);すると、下記表示となってしまいます。 これは、なぜでしょうか? array(1) { [0]=> array(1) { [0]=> string(3) "?" } }

    • ベストアンサー
    • PHP
  • phpでcsvの処理で困ってます。

    abc.csvというcsvデータを2次元配列にして、その中から指定した行(送信されてきた値$linenum = $_POST['num'];)の5番目の値を1つ増やして、またcsvデータに上書きしたいと思い下記のようにしてみたのですが、うまくいきません。どのようにすればいいのでしょうか、具体的に教えていただければ、ありがたいです。よろしくお願いします。 <?php header("Content-Type: text/html; charset=UTF-8"); $linenum = $_POST['num']; $list = fopen("abc.csv", "w"); $h = 0; while ($array = fgetcsv($list, 1000,",")) {   for ($i = 0; $i < count($array); $i++){   $newarray[$h][$i] = $array[$i]; } $h++;  } $cu = $newarray[$linenum][4]; $cu = $cu + 1; $newarray[$linenum][4] = $cu; fputcsv($list, $newarray); fclose($list); ?>

    • ベストアンサー
    • PHP
  • CSVファイル読み込み 文字化け

    アドバイスの方頂ければと思い質問しました。 os fedoracore5/php 5.2.5/mysql 5.0.27 SJISのCSVファイルを読み,UTF-8のプログラムで処理したいのですが、 文字列中に[,]を使用しているものには[""]で囲って いて、その他文字列の日本語部分は[""]で囲まれていません。 そこで下記のような形にしたのですが、日本語が化けてしまいます。 またCSVファイルの文字化けする項目を[""]で囲むと 正常に表示されます。文字列を[""]で囲まずとも文字化けしない方法、またプログラムに問題があればアドバイスを 頂ければと思います。 <?php define("TEST_FILE", "./tes.csv"); header("Content-Type: text/plain; charset=SJIS"); $fp = fopen(TEST_FILE, "r") ; while ($row = fgetcsv($fp)) { for ($j = 0; $j < count($row); $j++) { $data = mb_convert_encoding($row[$j], "UTF-8", "SJIS"); printf($data); } } fclose($fp); ?>

    • ベストアンサー
    • PHP
  • PHPのデータをCSVファイルに保存

    PHPで入力された情報を、CSVファイルに保存したいのですがうまくいきません。 $list=array($name,$jyusyo,$mail,$tel,$text); $fp=fopen('dat/dat.csv','a+'); foreach($list as $line){ fputcsv($fp,split(',',$line)); } fclose($fp); ウェブで調べてこのような形のものを作成してはみたんですが、 エラーが出てしまいます。CSVファイルに保存したい時は、 CSVファイルを先に作るべきなのでしょうか?そうでしたら、 作成の仕方を教えていただきたいです。 初心者ですがよろしくお願いします。

    • 締切済み
    • PHP
  • csvファイルを読み込んだ時の「ゼロ」の扱い

    すみません、教えてください。 test.csv というファイルに、 佐藤, 東京 田中, 大阪 中西, 京都 というデータが入っていたとして、以下を使って読み込むと、 <?php $file_name = "test.csv"; $fp = fopen( $file_name, 'r' ); $data = array(); while( $ret_csv = fgetcsv( $fp, 256 ) ){ for($col = 0; $col < count( $ret_csv ); $col++ ){ $data[$col][$row] = $ret_csv[$col]; } $row++; } fclose( $fp ); var_dump($data); ?> 以下のように、 [0] ではなく [""] となってしまうのですが、これを [0] にする方法はないでしょうか。 array(2) { [0]=> array(3) { [""]=> string(6) "佐藤" [1]=> string(6) "田中" [2]=> string(6) "中西" } [1]=> array(3) { [""]=> string(6) "東京" [1]=> string(6) "大阪" [2]=> string(7) "京都 " } } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ダブルクォーテーションつきでCSV出力したい

    今、PHPを勉強しています。 PHPでデータベースからとりだした配列を、CSVファイルに出力するサンプルプログラムをみつけました。 https://blog.supersonico.info/?p=869 このプログラムをそのまま実行すると、 CSVファイルに、 あああ,いいい,ううう,えええ かかか,ききき,くくく,けけけ と出力されます。 これを、ダブルクォーテーションつきで、 "あああ","いいい","ううう","えええ" "かかか","ききき","くくく","けけけ" と出力するにはどうすればいいのでしょうか? ***************************************** $csvFileName = '/tmp/' . time() . rand() . '.csv'; $res = fopen($csvFileName, 'w'); if ($res === FALSE) { throw new Exception('ファイルの書き込みに失敗しました。'); } $dataList = array(        //↓ここにダブルクォーテーションで囲ってもうまくいかない。↓ array('あああ','いいい','ううう','えええ'), array('かかか,'ききき','くくく','けけけ'), ); foreach($dataList as $dataInfo) { mb_convert_variables('SJIS', 'UTF-8', $dataInfo); fputcsv($res, $dataInfo); } fclose($res);

    • ベストアンサー
    • PHP
  • csvファイル出力時に文字化けしてしまう。

    csvファイル出力時に文字化けしてしまう。 csvファイルを作成して、保存してExcelで開くと文字化けしてしまいます。 保存するときに「右クリック→ファイルの保存」ではなく、「左クリック」するとデータがブラウザ上(FireFoxで確認)で観れるのですが、その時は文字化けしていません。 また、保存したファイルをTeraPadで開くと文字化けしませんでした。 ファイルの保存方法は、 $csvFile = 'entry.csv'; $csvData = "適当なデータ・・・・・・・・・・・・・・"; $fp = fopen($csvFile, 'ab'); flock($fp, LOCK_EX); ftruncate($fp,0); fwrite($fp,$csvData); fclose($fp); htmlのヘッダーには、 <meta http-equiv="Content-type" content="text/html; charset=utf-8"> を入れております。 以上よろしくお願いします。

    • ベストアンサー
    • PHP
  • csvに中身が書き込まれない

    作成してみたものがうまく動かず、どこがおかしいのかよく分からないため、 質問させていただきます。 もともとtest.csvにはUTF-8で作成した中身があります。 ひとつ前の画面でPOST送信しているフォームがあり、 中身のデータは下記です。 <form action="kakikomi.php" method="post"> <input type="hidden" name="aaa" value="bbb,ccc,ddd"> </form> #kakikomi.php(UTF-8) $csvFileName="test.csv";$csv=array(); foreach($_POST as $val){$csv[]=explode(",",$val);} setlocale(LC_ALL,"ja_JP.UTF-8"); if( $pointer=fopen($csvFileName,"w")): foreach($csv as $line){fputcsv($pointer,$line);} fclose($pointer); //print_r($csv); else:die('メッセージ'); endif; この結果はcsvの中身は真っ白になってしまいます。 fputcsvのマニュアル例からそのまま引用したのですがどこかおかしいのでしょうか。

    • 締切済み
    • PHP
  • CSVファイルの文字コード変換について

    CSVファイルをアップロードし、文字コードをSJISからEUC-JPに変換したいのですが、文字化けが発生します。 ソースは以下のようになっています。 $i=0; $file = fopen($file_path,"r"); while ($data = fgetcsv($file, $file_size, ',')) { for ($j=0; $j < count($data); $j++) { $Array[$i][$j] = mb_convert_encoding($data$j], "EUC", "auto"); }$i++; } PHP5を使用しており、エクセルとテキストエディターでCSVファイルを作成してみましたが結果はどちらも同じでした。 どなたかご教授願います。

    • 締切済み
    • PHP