Maison > Article > développement back-end > Comment résoudre le problème des noms de fichiers tronqués générés par php
Solution au nom de fichier tronqué généré par PHP : 1. Remplacez tous les signes + par "%20" ; 2. Ajoutez "header("Content-type: application/vnd.ms-excel"); " ; 3. Supprimez les espaces des deux côtés de "filename=xxx".
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
Solution à l'exportation PHP tronquée nom du fichier
Scénario de problème :
Les données statistiques doivent ajouter une fonction Excel universelle, j'ai donc utilisé composer pour installer le composant phpspreadsheet, traiter les données et exportez-le. Lorsque vous rencontrez des noms de fichiers nommés ASCII, tout est exporté normalement, mais lorsque vous rencontrez des noms de fichiers chinois, les noms de fichiers exportés sont tronqués.
La solution est publiée directement ici :
1. Traitement du nom de fichier
Parce que la fonction urlencode de PHP affichera divers caractères d'espacement. sont convertis en signes +. Ce signe + ne sera pas échappé, qu'il s'agisse de Chrome ou de Firefox
, donc ici tous les signes + sont à nouveau remplacés par %20
$file_name = '导出文件.xls'; // 这是原本要导出的文件名 $encoded_filename = url_encode($file_name);// 将文件名进行urlencode转码 $encoded_filename = str_replace('+', '%20', $encoded_filename);
2. Fichier d'en-tête : déclaration du type de fichier
Si le fichier exporté n'est pas d'un certain type Excel, utilisez l'en-tête de fichier n°1
Je l'ai exporté C'est un tableau au format xls sous excel , j'utilise donc l'en-tête du fichier n°2
// 文件头No.1: 告诉浏览器这里要有一个文件流输出 header("Content-type: application/octet-stream"); // 文件头No.2: 告诉浏览器这里要输出一个excel文件 header("Content-type: application/vnd.ms-excel");
fichier d'en-tête : Téléchargez la déclaration du nom du fichier
Cette étape est la clé, il y a deux choses à payer attention à
Qu'il s'agisse de filename=xxx ou filename*=xxx, il ne doit y avoir aucun espace des deux côtés du signe égal
filename*=xxx Cet élément de configuration se compose en fait de 3. parties Ils sont composés d'un jeu de caractères (utf8), d'un langage (vide) et d'un nom de fichier codé en urlen. Parmi eux, le langage est une chaîne vide, entourée de guillemets simples, et il ne doit y avoir aucun espace entre les trois parties.
header('Content-Disposition: attachment; filename="foo-%c3%a4.xls"; filename*=UTF-8\'\'foo-%c3%a4.xls');
J'ai utilisé le code ci-dessus pour tester avec Chrome, Firefox, 360 et ie11 et tout a bien fonctionné. J'espère que cela vous aidera aussi.
[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!