Maison > développement back-end > Problème PHP > Que faire si php exporte un fichier CSV avec des caractères tronqués

Que faire si php exporte un fichier CSV avec des caractères tronqués

藏色散人
Libérer: 2023-03-02 11:08:01
original
3273 Les gens l'ont consulté

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. .

Que faire si php exporte un fichier CSV avec des caractères tronqués

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));
Copier après la connexion

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));
Copier après la connexion

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));
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal