Lösung für von PHP generierte verstümmelte Dateinamen: 1. Ersetzen Sie alle +-Zeichen durch „%20“; 2. Fügen Sie „header(“Content-type: application/vnd.ms-excel“);“ hinzu Leerzeichen auf beiden Seiten von „filename=xxx“.
Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer
Lösung für verstümmelten PHP-Exportdateinamen
Problemszenario:
Statistische Daten müssen hinzugefügt werden Überall gibt es Excel-Funktionen. Verwenden Sie daher Composer, um die PHP-Spreadsheet-Komponente zu installieren, die Datenverarbeitung durchzuführen und zu exportieren. Bei ASCII-benannten Dateinamen wird alles normal exportiert, bei chinesischen Dateinamen sind die exportierten Dateinamen jedoch verstümmelt.
Die Lösung wird direkt hier veröffentlicht:
1. Dateinamenverarbeitung
Da die URL-Code-Funktion von PHP verschiedene Leerzeichen in +-Zeichen umwandelt, ist dieses +-Zeichen dasselbe, egal ob Chrome oder Firefox. Dies ist nicht der Fall maskiert werden
Also ersetzen Sie hier alle +-Zeichen wieder durch %20
$file_name = '导出文件.xls'; // 这是原本要导出的文件名 $encoded_filename = url_encode($file_name);// 将文件名进行urlencode转码 $encoded_filename = str_replace('+', '%20', $encoded_filename);
2. Header-Datei: Dateitypdeklaration
Wenn die exportierte Datei kein bestimmter Excel-Typ ist, verwenden Sie Datei-Header Nr. 1
I Habe eine Tabelle im XLS-Format unter Excel exportiert, also habe ich Dateikopf Nr. 2 verwendet
// 文件头No.1: 告诉浏览器这里要有一个文件流输出 header("Content-type: application/octet-stream"); // 文件头No.2: 告诉浏览器这里要输出一个excel文件 header("Content-type: application/vnd.ms-excel");
Header-Datei: Laden Sie die Dateinamenserklärung herunter
Dieser Schritt ist der Schlüssel, da sind zwei Dinge zu beachten
Ob es Dateiname= ist xxx oder Dateiname*=xxx, auf beiden Seiten des Gleichheitszeichens dürfen keine Leerzeichen stehen
Dateiname*=xxx Dieses Konfigurationselement besteht tatsächlich aus drei Teilen, nämlich Zeichensatz (utf8), Sprache (leer) und URL-codierter Dateiname , wobei Sprache eine leere Zeichenfolge ist, die in einfache Anführungszeichen gesetzt ist und zwischen den drei Teilen keine Leerzeichen stehen dürfen.
header('Content-Disposition: attachment; filename="foo-%c3%a4.xls"; filename*=UTF-8\'\'foo-%c3%a4.xls');
Ich habe den obigen Code zum Testen mit Chrome, Firefox, 360 und ie11 verwendet. Alle Tests haben gut funktioniert. Ich hoffe, es hilft dir auch.
【Empfohlenes Lernen: PHP-Video-Tutorial】
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem der von PHP generierten verstümmelten Dateinamen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!