Domanda

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

È possibile che questo viene da manuale php, ma non ho visto dove specificare la codifica (come utf8 o giù di lì)

È stato utile?

Soluzione

Prova a modificare le impostazioni internazionali.

Come si dice qui di seguito l'esempio nel manuale hai dato :

  

Nota: impostazione Locale viene preso in considerazione da questa funzione. Se LANG è ad esempio en_US.UTF-8,   file in codifica di un byte vengono letti sbagliato da questa funzione.

approccio commento sulla stessa pagina suggerito:

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

setlocale() :

  

nomi di locale, possono essere trovati in RFC 1766 e ISO 639 . Sistemi diversi hanno   diversi schemi di denominazione per i locali. [...] In Windows, setlocale(LC_ALL, '') imposta il   nomi di locale da impostazioni regionali / lingua del sistema (accessibile tramite il Pannello di controllo).

Altri suggerimenti

Una cosa del genere è la presenza del marchio ordine UTF di byte, o BOM. Il carattere UTF-8 per l'indicatore per l'ordine dei byte è U + FEFF, o meglio tre byte - 0xEF, 0xBB e 0xBF - che si trova all'inizio del file di testo. Per UTF-16 è usato per indicare l'ordine dei byte. Per UTF-8 non è davvero necessario.

Quindi è necessario rilevare i tre byte e rimuovere la distinta base. Qui di seguito è un esempio semplificato su come rilevare e rimuovere i tre byte.

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

Questo è tutto

provare questo:

<?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>";
}
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top