Maison  >  Article  >  développement back-end  >  PHP génère un fichier CSV avec des caractères tronqués sous Mac

PHP génère un fichier CSV avec des caractères tronqués sous Mac

不言
不言original
2018-04-24 09:20:001898parcourir

Cet article présente principalement php pour générer du code csv tronqué sous mac. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer


<?php
     $file_name = date(&#39;Ymd&#39;, time()) . &#39;.csv&#39;;  //设置文件名
     header(&#39;Content-Type: application/vnd.ms-excel&#39;);
header(&#39;Content-Disposition: attachment;filename=&#39;.$file_name);
header(&#39;Cache-Control: max-age=0&#39;);
$fp = fopen(&#39;php://output&#39;, &#39;a&#39;);
$row = [
&#39;name&#39; => &#39;测试&#39;,
&#39;email&#39; => 111111,
&#39;mobile&#39; => 22222,
&#39;weixinid&#39; => &#39;微信号&#39;,
];
fwrite($fp,"\xEF\xBB\xBF");
fputcsv($fp, $row);


Solution au problème tronqué du fichier csv exporté par php


Avant de parler de cette question, parlons d'abord de ce qu'est un fichier CSV ? La valeur du séparateur par virgule (valeur séparée par des virgules) l'est également. Il existe des fichiers intermédiaires souvent utilisés pour la conversion de données, tels que l'exportation de données de Mysql vers CSV et l'importation de CSV dans SqlServer. Utilisez un script PHP sous Linux pour exporter les données de la table de la base de données Mysql vers csv selon les conditions. Utilisez l'encodage utf-8 pour exporter le fichier CSV. Après ouverture, le contenu chinois devient tronqué (les fichiers CSV sous Windows sont associés à Microsoft Excel). par défaut). Utilisez Notepad++ ou Word s'ouvre normalement, mais la mise en page est désordonnée. Raison : BOM est en difficulté, Microsoft est en difficulté.


Qu'est-ce que la nomenclature ? La marque d'ordre d'octet (marque d'ordre de bits) l'est également.
Afin de reconnaître les fichiers Unicode, Microsoft recommande que tous les fichiers Unicode commencent par le caractère ZERO WIDTH NOBREAK SPACE. Cela sert de « signature » ou de « marque d'ordre d'octet (BOM) » pour identifier l'encodage et l'ordre d'octet (gros-boutiste ou petit-boutiste) utilisés dans le fichier. La correspondance spécifique est indiquée dans le tableau ci-dessous.

Formulaire de codage d'octets

00 00 FE FF UTF-32, big-endian
FF FE 00 00 UTF-32, little-endian
FE FF UTF-16, big-endian
FF FE UTF-16, little-endian
EF BB BF UTF-8

La nomenclature n'est pas utilisée dans les systèmes de type Unix car elle détruira les conventions de syntaxe ASCII existantes pour les fichiers.


Implémentez le code si

Remarque : lors de l'écriture du fichier csv, assurez-vous que le code source php est utf-8, n'a pas de nomenclature et ne produit rien.




Quand Excel lit csv, il lit l'en-tête du fichier La nomenclature est utilisée pour identifier l'encodage S'il n'y a aucune information de nomenclature dans l'en-tête du fichier, elle sera lue selon l'encodage Unicode par défaut. (Cette nomenclature est un protocole d'en-tête de fichier défini par Microsoft lui-même. Comme son nom l'indique, il est stocké dans l'en-tête du fichier. Le contenu stocké est l'information qui identifie l'encodage du fichier.)

La plateforme que nous utilisons pour générer CSV ne suit pas nécessairement le protocole de nomenclature de Microsoft, car si un fichier CSV encodé non-Unicode (tel que utf-8) est généré et qu'aucune information de nomenclature n'est générée, Excel lira automatiquement selon le codage Unicode et des caractères tronqués apparaîtront .

Après avoir maîtrisé cela, je crois que les caractères tronqués ne peuvent plus nous empêcher d'avancer : ouvrez simplement le fichier csv encodé non-unicode avec un éditeur de texte (notepad++ est recommandé) et convertissez-le en forme d'encodage avec BOM (en particulier La méthode de codage est arbitraire), le problème est résolu.

Recommandations associées :

PHP génère une classe RequestID unique

Un exemple détaillé de la façon dont PHP génère une table de fichier de suffixe .csv


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