Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das Problem der von PHP generierten verstümmelten Dateinamen

So lösen Sie das Problem der von PHP generierten verstümmelten Dateinamen

藏色散人
藏色散人Original
2021-04-02 09:07:522409Durchsuche

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“.

So lösen Sie das Problem der von PHP generierten verstümmelten Dateinamen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn