Heim > Artikel > Backend-Entwicklung > PHP generiert unter Mac eine CSV-Datei mit verstümmelten Zeichen
Dieser Artikel stellt hauptsächlich PHP zum Generieren von verstümmeltem CSV-Code unter Mac vor. Jetzt kann ich ihn mit allen teilen, die ihn benötigen
<?php $file_name = date('Ymd', time()) . '.csv'; //设置文件名 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename='.$file_name); header('Cache-Control: max-age=0'); $fp = fopen('php://output', 'a'); $row = [ 'name' => '测试', 'email' => 111111, 'mobile' => 22222, 'weixinid' => '微信号', ]; fwrite($fp,"\xEF\xBB\xBF"); fputcsv($fp, $row);
Lösung für das verstümmelte Problem der von PHP exportierten CSV-Datei
Bevor wir über diese Frage sprechen, sprechen wir zunächst darüber, was eine CSV-Datei ist. Komma-Trennwert (durch Kommas getrennter Wert) ist ebenfalls vorhanden. Es gibt Zwischendateien, die häufig für die Datenkonvertierung verwendet werden, z. B. zum Exportieren von Daten von MySQL nach CSV und zum Importieren von CSV in SqlServer. Verwenden Sie ein PHP-Skript unter Linux, um die Tabellendaten entsprechend den Bedingungen aus der MySQL-Datenbank in CSV zu exportieren. Verwenden Sie die UTF-8-Kodierung, um die CSV-Datei zu exportieren. Nach dem Öffnen wird das Chinesisch darin verstümmelt (CSV-Dateien unter Windows sind mit Microsoft Excel verknüpft). Standardmäßig wird Notepad++ verwendet oder Word wird normal geöffnet, aber das Layout ist unübersichtlich. Grund: BOM ist in Schwierigkeiten, Microsoft ist in Schwierigkeiten.
Was ist Stückliste? Byte Order Mark (Bit Order Mark) ist ebenfalls vorhanden.
Um Unicode-Dateien zu erkennen, empfiehlt Microsoft, dass alle Unicode-Dateien mit dem Zeichen ZERO WIDTH NOBREAK SPACE beginnen. Dies dient als „Signatur“ oder „Byte-Order-Markierung (BOM)“, um die in der Datei verwendete Codierung und Byte-Reihenfolge (Big-Endian oder Little-Endian) zu identifizieren. Die spezifische Entsprechung ist in der folgenden Tabelle aufgeführt.
Bytes-Codierungsform
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 |
BOM wird in Unix-ähnlichen Systemen nicht verwendet, da dadurch bestehende ASCII-Syntaxkonventionen zerstört werden für Dateien.
Implementieren Sie den Code, wenn
Hinweis: Stellen Sie beim Schreiben der CSV-Datei sicher, dass der PHP-Quellcode utf-8 ist, keine Stückliste hat und gibt nichts aus.
Wenn Excel CSV liest, liest es den Dateikopf. Die Stückliste wird verwendet um die Kodierung zu identifizieren. Wenn der Dateiheader keine Stücklisteninformationen enthält, wird er standardmäßig gemäß der Unicode-Kodierung gelesen. (Diese Stückliste ist ein von Microsoft selbst definiertes Datei-Header-Protokoll. Wie der Name schon sagt, wird es im Datei-Header gespeichert. Der gespeicherte Inhalt ist die Information, die die Dateikodierung identifiziert.)
Die Plattform, die wir verwenden CSV generieren folgt nicht unbedingt dem BOM-Protokoll von Microsoft. Wenn eine nicht Unicode-codierte CSV-Datei (z. B. utf-8) ausgegeben wird und keine BOM-Informationen generiert werden, liest Excel automatisch entsprechend der Unicode-Codierung und verstümmelte Zeichen treten auf .
Nachdem ich das gemeistert habe, glaube ich, dass verstümmelte Zeichen uns nicht länger davon abhalten können, weiterzumachen: Öffnen Sie einfach die nicht-Unicode-codierte CSV-Datei mit einem Texteditor (Notepad++ wird empfohlen) und konvertieren Sie sie mit in die Codierungsform Stückliste (insbesondere Die Codierungsmethode ist beliebig), das Problem ist gelöst.
Verwandte Empfehlungen:
PHP generiert eine eindeutige RequestID-Klasse
Ein detailliertes Beispiel, wie PHP eine .csv-Suffixdateitabelle generiert
Das obige ist der detaillierte Inhalt vonPHP generiert unter Mac eine CSV-Datei mit verstümmelten Zeichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!