Maison > développement back-end > Problème PHP > Que faire si php génère des caractères csv tronqués

Que faire si php génère des caractères csv tronqués

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

La solution à la sortie CSV tronquée de PHP : ouvrez d'abord le fichier de code correspondant ; puis affichez l'en-tête de nomenclature au début du fichier et indiquez à Windows la méthode d'encodage du fichier CSV et enfin, laissez Excel l'utiliser ; l'encodage correct lors de l'ouverture du CSV Can.

Que faire si php génère des caractères csv tronqués

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur Dell G3.

Solution aux caractères tronqués lors de l'exportation de fichiers CSV depuis PHP

Lorsque nous travaillerons sur des projets utilisant des langues étrangères, 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.

[Apprentissage recommandé : "Tutoriel vidéo PHP"]

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 encodé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

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:
php
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