CSV (Comma Separated Values) est un format de stockage de données courant qui est souvent utilisé pour transférer des données entre différentes applications. En PHP, il est facile d'exporter des données au format de fichier CSV, utilisez simplement la fonction appropriée pour générer le fichier CSV.
Cependant, parfois, lorsque vous utilisez PHP pour générer le format CSV, vous rencontrerez le problème que le fichier CSV contient des caractères tronqués. Par exemple, le fichier CSV exporté n'affiche pas correctement les caractères chinois ou autres caractères spéciaux. Cela peut être dû au fait que PHP utilise un codage incorrect lors de la sortie du fichier CSV.
Ci-dessous, nous présenterons quelques causes courantes et solutions pour vous aider à générer le format de fichier CSV correct en PHP.
Cause 1 : PHP utilise un mauvais encodage lors de la sortie du fichier CSV
Lorsque vous exportez des données vers un fichier CSV, PHP essaiera de convertir automatiquement le jeu de caractères en fonction du encodage local. Par exemple, si vous utilisez un système d’exploitation chinois, PHP utilisera par défaut l’encodage GBK. Cependant, si vos données contiennent des caractères codés de manière non native, tels que des caractères codés UTF-8, cela peut entraîner des caractères tronqués dans votre fichier CSV.
Solution :
Pour éviter ce problème, vous pouvez spécifier le bon encodage lors de la sortie du fichier CSV. Par exemple, si vos données sont encodées en UTF-8, avant d'écrire les données dans le fichier CSV, définissez l'encodage sur l'encodage UTF-8 :
header('Content-Type: text/csv; charset=utf-8');
De plus, lorsque vous utilisez la fonction fwrite(), lorsque les données sont écrites dans un fichier CSV, son encodage doit également être défini sur l'encodage UTF-8 :
fwrite($file, "\xEF\xBB\xBF"); // 添加 BOM 头,解决文件乱码问题 foreach ($data as $row) { fputcsv($file, $row); }
Comme vous pouvez le voir, afin de garantir que le fichier CSV de sortie a le bon encodage, nous avons avant la fonction fwrite() Ajout d'un en-tête BOM qui indique à l'application l'encodage du contenu du texte.
Cause 2 : Le fichier CSV contient des caractères non-ASCII
Le format de fichier CSV est un format de texte brut qui utilise des caractères simples comme délimiteurs (généralement des virgules) pour diviser les données en colonnes et en lignes. Étant donné qu'un fichier CSV est écrit au format texte, il ne peut contenir que des caractères ASCII (c'est-à-dire des lettres latines de base, des chiffres et des signes de ponctuation). Si vos données contiennent des caractères non-ASCII, tels que des caractères chinois ou des symboles spéciaux, cela peut entraîner des caractères tronqués dans votre fichier CSV.
Solution :
Pour éviter ce problème, vous pouvez utiliser la fonction mb_convert_encoding() intégrée de PHP pour convertir les données au format d'encodage ASCII :
$encoded_data = array_map(function($row) { return array_map('utf8_decode', $row); // 将 UTF-8 编码转换为 ASCII 编码 }, $data); foreach ($encoded_data as $row) { fputcsv($file, $row); }
foreach ($data as $row) { $row = str_replace(',', ';', $row); fputcsv($file, $row); }
foreach ($data as $row) { $row = str_replace("\n", ' ', $row); fputcsv($file, $row); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!