2 votes

fopen montre des caractères invalides au début du csv

J'ai ce code en php qui ouvre un fichier CSV, lit la première ligne dans un tableau et affiche le contenu :

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

Le problème est que le tableau imprimé montre Array ( [0] => increment_id... Là où il devrait être Array ( [0] => increment_id... . Je ne sais pas d'où viennent ces premiers caractères, puisqu'ils ne sont pas présents lorsque j'ouvre le fichier csv avec Notepad++ . Je suppose que je pourrais convertir le fichier dans un autre encodage, mais ce serait difficile, puisqu'il s'agit du résultat d'un programme que je n'ai pas créé, à moins qu'il n'existe un moyen de le ré-encoder avec PHP.

2voto

spirit Points 1824

Dans Notepad++, ouvrez ce fichier, puis allez à "Encodage" puis choisissez "Encoder en UTF-8" . Sauvegardez le fichier. Ces 3 octets auront disparu.

Ou vous pourriez faire comme ceci :

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

ceci supprimera la signature UTF-8 du fichier.

0voto

Actuellement, vous lisez et analysez directement le fichier en tant que CSV. Changez d'approche : lisez le fichier en tant que chaîne de caractères puis analysez la chaîne en tant que CSV, exemple :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X