2016-06-28 7 views
2

私はPHPでこのコードを持っているの先頭に無効な文字を示し配列に最初の行を読み込み、内容を示していますのfopenは、CSVファイルを開き、CSV

if (($tmp = fopen($file, "r")) !== FALSE) { 
    $firstLine = fgetcsv($tmp, 0, ","); 
    print_r($firstLine); 
} 

問題は、印刷された配列Array ([0] => increment_id... ここには、Array ([0] => increment_id...が表示されます。 最初の文字はどこから来たのか分かりません。なぜなら、csvファイルを開いたときに、メモ帳++と表示されていないからです。私は別のエンコーディングにファイルを変換することができると思いますが、PHPで再エンコードする方法がない限り、作成していないプログラムの出力であるため、難しくなります。

+2

ファイルの先頭に[バイトオーダーマーク](https://en.wikipedia.org/wiki/Byte_order_mark)があります。 –

+1

[UTF-8](https://en.wikipedia.org/wiki/Byte_order_mark)にエンコードされた[BOM](https://en.wikipedia.org/wiki/Byte_order_mark)(バイトオーダーマーク)です#UTF-8)。これはファイル内に存在しますが、テキストエディタには表示されません(技術的には印刷できない文字です)が、ファイル内の文字のエンコーディングについて知るために使用します。 – axiac

答えて

2

はUTF-8で」エンコードを選択するよりも、メニューの「エンコード」に行くよりも、そのファイルを開く++ "。ファイルを保存します。これらの3バイトはなくなります。

それとも、このように行うことができます。これは、ファイルからUTF-8の署名を削除します

file_put_contents($file, str_replace("\xEF\xBB\xBF", "", file_get_contents($file))); 
if (($tmp = fopen($file, "r")) !== FALSE) { 
    $firstLine = fgetcsv($tmp, 0, ","); 
    print_r($firstLine); 
} 

+1

ok =)これを試してください: '$ firstLine = fgetcsv(str_replace(" \ xEF \ xBB \ xBF "、" $ tmp)、0、 "、"); ' – spirit

+0

True!これについて完全に忘れる=)。ちょっと待ってください。 – spirit

+0

私の答えを固定 – spirit

0

今すぐCSV形式でファイルを読み込んで解析しています。アプローチを変更します。その後、CSV、一例として、文字列を解析文字列としてファイルを読む:メモ帳で

<?php 
/*$file = "test.csv"; 
if (($tmp = fopen($file, "r")) !== FALSE) { 
    $firs= fgetcsv($tmp, 0, ","); 
    print_r($firstLine); 
}*/ 
$handle = fopen("test.csv", "r"); 
$line = fgets($handle);   // GET FIRST LINE IN FILE. 
$line = str_getcsv($line, ","); // PARSE LINE AS CSV. 
print_r($line); 
?> 
関連する問題