Kodlamasını belirtmek için nasıl PHP süreç csv dosyası ise?

2 Cevap php
<?php
$row = 1;
$handle = fopen ("test.csv","r");
while ($data = fgetcsv ($handle, 1000, ",")) {
    $num = count ($data);
    print "<p> $num fields in line $row: <br>\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        print $data[$c] . "<br>\n";
    }
}
fclose ($handle);
?> 

Yukarıdaki php kılavuzda geliyor, ama ben (yani utf8 veya benzeri) kodlamasını belirtmek için nereye görmedim

2 Cevap

Yereli değiştirmeye çalışın.

Bu örnekte aşağıdaki diyor gibi manual sen verdi:

Note: Locale setting is taken into account by this function. If LANG is e.g. en_US.UTF-8, files in one-byte encoding are read wrong by this function.

Suggested approach by comment on the same page:

setlocale(LC_ALL, 'ja_JP.UTF8'); // for japanese locale

Dan setlocale() :

Locale names can be found in RFC 1766 and ISO 639. Different systems have different naming schemes for locales. […] On Windows, setlocale(LC_ALL, '') sets the locale names from the system's regional/language settings (accessible via Control Panel).

Böyle bir şey UTF bayt sırası işareti oluşumu, veya BOM olduğunu. Metin dosyasının başında oturur - 0xEF, 0xBB ve 0xbf - bayt sırası işareti için UTF-8 karakter U + FEFF, ya da daha doğrusu üç bayt. UTF-16 için bu bayt sırasını göstermek için kullanılır. UTF-8 için gerçekten gerekli değildir.

Yani üç bayt algılar ve BOM kaldırmak gerekir. Aşağıda üç bayt algılamak ve kaldırmak için nasıl bir basitleştirilmiş bir örnektir.

$str = file_get_contents('file.utf8.csv');
$bom = pack("CCC", 0xef, 0xbb, 0xbf);
if (0 == strncmp($str, $bom, 3)) {
    echo "BOM detected - file is UTF-8\n";
    $str = substr($str, 3);
}

Hepsi bu