アシアル株式会社主催 開発者向け、一歩先をいくためのテクニカルセミナー

<< セッションIDをDBに登録してあるもの... 質問一覧 デイレクトリにある画像をリネーム >>
  • キーワードが設定されていません

  • 0P
CSV文字化け

タイトル通りなのですがphpでcsvの読み込みを行っているのですが全て文字化けします。
文字コードはcsvがshift_jisでphpはutf-8です。

fgetcsv_regは文字化けする回避法として良さそうだったので下記URLのものをそのまま
使わせていただいておりますが文字化けしてしまいます。
※csvをutf-8で保存すると正常に表示されるのは確認済み

http://yossy.iimp.jp/wp/?p=56

  1. $row = 1;
  2.     $handle = fopen('hoge.csv', "r");
  3.     while (($data = fgetcsv_reg($handle)) !== false) {
  4.         $_enc_to=mb_internal_encoding();
  5.         $_enc_from=mb_detect_order();
  6.         mb_convert_variables($_enc_to,$_enc_from,$data);
  7.         $num = count($data);
  8.         echo "<p> $num fields in line $row: </p><br />";
  9.         $row++;
  10.         for ($c=0; $c < $num; $c++) {
  11.             echo nl2br($data[$c]) . "<br />";
  12.         }
  13.     }
  14.     fclose($handle);

・$_enc_toの中身
UTF-8

・$_enc_fromの中身
Array
(
    [0] => UTF-8
)

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

QCSV文字化け agupx  [06月22日 11時34分] 
┗Re:CSV文字化け shimix  [06月22日 11時40分] 
  ┗Re:Re:CSV文字化け agupx  [06月22日 13時08分] 
    ┗Re:Re:Re:CSV文字化け shimix  [06月22日 13時27分] 

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:CSV文字化け

>・$_enc_fromの中身
>Array
>(
>    [0] => UTF-8
>)

原因はこれですね。



>文字コードはcsvがshift_jisでphpはutf-8です。

データの文字コードが既知であれば

>$_enc_from=mb_detect_order();

じゃなくて

  1. $_enc_from = 'sjis';

でいいんじゃないでしょうか?mb_detect_orderを指定しても、mb_detect_orderにutf-8しかない環境では意味がありません。

Re:Re:CSV文字化け

  1. $_enc_from = 'sjis';

にしたところ見事解決です!ありがとうございます!

参考までに質問なのですがutf-8しか返さないのはサーバーの設定という事でしょうか?
現在、xampp環境で試している状況なのですが設定項目は何になるのでしょう?
csvの文字コードはshift_jisで統一なので今回のように直接指定してやるのが確実な方法かと思うのですが教えていただけますと幸いです。

Re:Re:Re:CSV文字化け

>utf-8しか返さないのはサーバーの設定という事でしょうか?

サーバの設定です。

RTFM.

  http://www.php.net/manual/ja/function.mb-detect-order.php

  http://www.php.net/manual/ja/mbstring.configuration.php#ini.mbstring.detect-order
セッションIDをDBに登録してあるもの... 質問一覧 デイレクトリにある画像をリネーム