2
<?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);
?> 

上記はphpマニュアルからのものですが、エンコーディングを指定する場所がわかりませんでした(utf8など)

4

3 に答える 3

4

ロケールを変更してみてください。

それがあなたが与えたマニュアルの例の下に言うように:

注:この関数では、ロケール設定が考慮されます。LANGがen_US.UTF-8などの場合、1バイトエンコーディングのファイルはこの関数によって誤って読み取られます。

同じページのコメントによる提案されたアプローチ

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

差出人setlocale()

ロケール名はRFC1766およびISO639に記載されています。システムが異なれば、ロケールの命名スキームも異なります。[…]Windowsではsetlocale(LC_ALL, '')、システムの地域/言語設定からロケール名を設定します(コントロールパネルからアクセス可能)。

于 2010-01-12T10:59:27.473 に答える
0

そのようなものの1つは、UTFバイトオーダーマーク(BOM)の出現です。バイト順マークのUTF-8文字はU+FEFFであり、テキストファイルの先頭にある3バイト(0xef、0xbb、および0xbf)です。UTF-16の場合、バイト順序を示すために使用されます。UTF-8の場合、これは実際には必要ありません。

したがって、3バイトを検出し、BOMを削除する必要があります。以下は、3バイトを検出して削除する方法の簡単な例です。

$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);
}

それで全部です

于 2012-09-28T15:40:56.730 に答える
0

これを試して:

<?php
$handle = fopen ("specialchars.csv","r");
echo '<table border="1"><tr><td>First name</td><td>Last name</td></tr><tr>';
while ($data = fgetcsv ($handle, 1000, ";")) {
        $data = array_map("utf8_encode", $data); //added
        $num = count ($data);
        for ($c=0; $c < $num; $c++) {
            // output data
            echo "<td>$data[$c]</td>";
        }
        echo "</tr><tr>";
}
?>
于 2017-03-29T10:51:50.537 に答える