Maison >développement back-end >Problème PHP >Comment résoudre le CSV tronqué exporté par PHP encodé en utf8 ?

Comment résoudre le CSV tronqué exporté par PHP encodé en utf8 ?

青灯夜游
青灯夜游original
2020-08-17 10:43:034481parcourir

Méthodes pour résoudre les caractères tronqués : 1. Utilisez la fonction iconv pour transcoder l'encodage utf8 en GBK, syntaxe "$str = iconv('utf-8', 'GBK//IGNORE', $str));" ; 2. Affichez l'en-tête de la nomenclature avant d'afficher le contenu, afin qu'Excel puisse reconnaître automatiquement qu'il s'agit d'UTF-8.

Comment résoudre le CSV tronqué exporté par PHP encodé en utf8 ?

Recommandé : "Tutoriel vidéo PHP"

En fait, l'exigence est d'exporter les données vers Excel, qui est très Bien sûr, on pense à la célèbre bibliothèque PHPExcel. Cette bibliothèque est très puissante, mais elle prend beaucoup de mémoire avec plus de 100 000 données, elle est fondamentalement difficile à compléter dans les requêtes web. Par conséquent, il est toujours nécessaire d’utiliser PHP natif pour exporter des fichiers CSV légers.

Dans des circonstances normales, lors de l'exportation de contenu régulier encodé en UTF-8 au format CSV, il sera tronqué lorsqu'il sera ouvert avec Excel, sans parler de certains caractères non traditionnels ou expressions emoji. La raison de ce code tronqué est que sous les systèmes Windows, Excel par défaut est analysé à l'aide du codage GBK. De nos jours, aucun codage n'utilise UTF-8. Si tel est le cas, les produits bien connus des grandes entreprises produiront du GBK et d'autres versions de codage afin d'économiser du trafic. Généralement, ils utilisent UTF-8.

Pour résoudre le problème des caractères tronqués, la méthode en PHP consiste généralement à utiliser la fonction iconv pour transcoder en GBK. De cette façon, il n'y aura aucun problème lors de l'ouverture d'Excel par défaut. Mais pour les caractères courants tels que les expressions emoji, GBK ne peut pas les afficher. Si le transcodage échoue, les caractères seront vides. Vous pouvez ajouter la balise //IGNORE pour les ignorer, afin qu'ils soient ignorés et que d'autres caractères normaux puissent être conservés.

$str = iconv('utf-8', 'GBK//IGNORE', $str));

Cela peut être considéré comme un compromis. Puis-je sortir directement du UTF-8 sans transcodage ? Excel ne reconnaît-il pas automatiquement UTF-8 et n'utilise-t-il pas UTF-8 pour le décoder et l'afficher ? En fait, c'est possible, mais cela nécessite un en-tête BOM (il n'y a rien de tel dans le monde non Windows). Avec cet en-tête BOM, il peut reconnaître qu'il s'agit d'UTF-8. Sinon, il ne peut pas le reconnaître et l'utiliser. le GBK par défaut pour le traiter. Naturellement, c'est juste du charabia. Comment afficher correctement ce qu'on appelle l'en-tête de nomenclature, voir le code :

$fp = fopen('./test_csv.csv', 'a');
fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));//输出BOM头
fputcsv($fp, ['标题']);
fputcsv($fp, ['解决乱码']);
fclose($fp);

Le test personnel ci-dessus peut résoudre les caractères dits tronqués et l'affichage normal de caractères non traditionnels tels que les expressions emoji.

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