Maison  >  Article  >  développement back-end  >  Comment résoudre le problème de la sortie CSV tronquée de PHP

Comment résoudre le problème de la sortie CSV tronquée de PHP

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼original
2019-09-27 09:14:222695parcourir

Comment résoudre le problème de la sortie CSV tronquée de PHP

Lorsque nous travaillons sur un projet dans une langue étrangère, 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.

Recommandations associées : "Tutoriel php"

Qu'est-ce que la BOM

dans l'encodage UCS Là est un caractère appelé "ZERO WIDTH NO-BREAK SPACE", et son codage 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 soit sorti

print(chr(0xEF).chr(0xBB).chr(0xBF));

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

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

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!

Déclaration:
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