Comment définir l'encodage lors de l'exportation csv avec PHP : 1. Utilisez la méthode iconv pour transcoder le contenu exporté de utf-8 en gb2312 ; 2. Utilisez la méthode mb_convert_encoding pour convertir l'encodage.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur Dell G3
Comment exporter l'encodage des paramètres csv avec php ? Exporter du code csv tronqué sous PHP ?
Nous utilisions PHPexcel pour exporter certaines de nos données. Étant donné que Phpexcel provoquait un délai d'attente et une explosion de mémoire lors de l'exportation de plus de 10 000 éléments de données, nous sommes ensuite passés à l'exportation de données au format CSV.
Je pense que de nombreux amis ont rencontré divers problèmes tronqués lors de l'exportation de fichiers CSV à l'aide de PHP. J'ai beaucoup cherché sur Internet et j'ai trouvé des solutions en ajoutant BOM. J'ai essayé cette méthode plusieurs fois mais cela n'a pas fonctionné dans nos environnements de test et de production, je ne sais pas pourquoi.
Plus tard, nous avons utilisé la méthode iconv pour transcoder le contenu exporté de utf-8 vers gb2312. Le miracle s'est finalement produit et il a pu être affiché normalement. Cependant, un collègue a découvert qu'il manquait des dizaines de données parmi les autres. plus de 400 éléments de données que nous avons exportés (je les ai transcodés un par un, puis je les ai fusionnés en une chaîne CSV). Je suis donc allé à Du Niang pour trouver le problème de l'échec du transcodage d'iconv, et j'ai découvert qu'iconv s'est avéré avoir un bug. Certains caractères chinois ne pouvaient pas être convertis, ils ne pouvaient pas être ignorés et renvoyaient une valeur nulle. valeur. C'est la raison pour laquelle des dizaines de données manquaient et fournit également la méthode d'utilisation de mb_convert_encoding pour convertir. J'ai donc fait une légère modification et je l'ai changé pour utiliser la méthode mb_convert_encoding. Le test sur la machine locale était tout à fait normal. Le code est le suivant :
$str = mb_convert_encoding($str,'gb2312');
Mais lorsque les données sont exportées en ligne, c'est toujours un tas de caractères tronqués. , mais ce n'est pas la même chose que les caractères tronqués avant sans transcodage, indiquant que la méthode mb_convert_encoding fonctionne. J'ai vérifié que la méthode mb_convert_encoding avait trois paramètres $from_encoding. Le troisième paramètre est un paramètre facultatif. La plupart des exemples sur Internet n'utilisent pas le troisième paramètre. Je l'ai donc changé en
$str = mb_convert_encoding($str,'gb2312','utf-8');
et je l'ai testé sur la machine de développement locale. Quand je l'ai publié dans l'environnement de production, hahaha, tout était normal.
Pourquoi ? Je n'ai vraiment pas le temps de m'y plonger. Si quelqu'un le sait, dites-le-moi s'il vous plaît
Apprentissage recommandé : "Tutoriel vidéo PHP"
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!