La solution à l'exportation CSV tronquée depuis PHP consiste à afficher l'en-tête de nomenclature au début du fichier pour indiquer à Windows la méthode d'encodage du fichier CSV, afin qu'Excel puisse utiliser l'encodage correct lors de l'ouverture du fichier CSV. .
Solution aux caractères tronqués lors de l'exportation de fichiers CSV depuis PHP
Lorsque vous travaillez sur des projets où les langues étrangères sont utilisé, nous utiliserons l’encodage UTF-8. Cependant, lors de l'exportation d'un fichier CSV à l'aide de PHP, si les données écrites sont dans des langues étrangères telles que le japonais et le coréen utilisant le codage UTF-8, des caractères tronqués apparaîtront.
Pour résoudre le problème tronqué des fichiers CSV générés par PHP, il vous suffit d'afficher l'en-tête de nomenclature au début du fichier pour indiquer à Windows la méthode d'encodage du fichier CSV, afin qu'Excel puisse utiliser le bon encodage lors de l’ouverture du CSV.
Qu'est-ce que BOM
Il existe un caractère appelé "ZERO WIDTH NO-BREAK SPACE" dans l'encodage UCS, et son encodage est FEFF. FFFE est un caractère qui n'existe pas dans UCS, il ne devrait donc pas apparaître dans la transmission réelle. La spécification UCS recommande de transmettre les caractères "ZERO WIDTH NO-BREAK SPACE" avant de transmettre le flux d'octets. De cette façon, si le récepteur reçoit FEFF, cela indique que le flux d'octets est Big-Endian ; s'il reçoit FFFE, cela indique que le flux d'octets est Little-Endian. Par conséquent, le caractère
"ZERO WIDTH NO-BREAK SPACE" est également appelé BOM. UTF-8 ne nécessite pas de nomenclature pour indiquer l'ordre des octets, mais peut utiliser la nomenclature pour indiquer la méthode de codage. Le codage UTF-8 du caractère « ZERO WIDTH NO-BREAK SPACE » est EF BB BF. Ainsi, si le récepteur reçoit un flux d'octets commençant par EF BB BF, il sait qu'il est codé en UTF-8. Windows utilise BOM pour marquer l'encodage des fichiers texte
Avant que tout le contenu ne soit sorti
print(chr(0xEF).chr(0xBB).chr(0xBF));
Plusieurs en-têtes de nomenclature codés en UTF
define ('UTF32_BIG_ENDIAN_BOM' , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF)); define ('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00)); define ('UTF16_BIG_ENDIAN_BOM' , chr(0xFE) . chr(0xFF)); define ('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE)); define ('UTF8_BOM' , chr(0xEF) . chr(0xBB) . chr(0xBF));
Code complet
header('Expires: 0'); header('Cache-control: private'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Content-Description: File Transfer'); header('Content-Encoding: UTF-8'); header('Content-type: text/csv; charset=UTF-8'); header('Content-Disposition: attachment; filename=Customers_Export.csv'); echo "\xEF\xBB\xBF"; // UTF-8 BOM // print(chr(0xEF).chr(0xBB).chr(0xBF));
Pour plus de connaissances connexes, veuillez visiter le Site Web PHP chinois !
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!