Die Lösung für den verstümmelten CSV-Export aus PHP besteht darin, den BOM-Header am Anfang der Datei auszugeben, um Windows die Kodierungsmethode der CSV-Datei mitzuteilen, damit Excel beim Öffnen der CSV die richtige Kodierung verwenden kann .
Lösung für verstümmelte Zeichen beim Exportieren von CSV-Dateien aus PHP
Bei der Arbeit an Projekten mit Fremdsprachen verwendet, verwenden wir die UTF-8-Kodierung. Wenn jedoch beim Exportieren einer CSV-Datei mit PHP die geschriebenen Daten in Fremdsprachen wie Japanisch und Koreanisch mit UTF-8-Kodierung vorliegen, werden verstümmelte Zeichen angezeigt.
Um das verstümmelte Problem der von PHP generierten CSV-Dateien zu lösen, müssen Sie nur den BOM-Header am Anfang der Datei ausgeben, um Windows die Kodierungsmethode der CSV-Datei mitzuteilen, damit Excel die richtige verwenden kann Codierung beim Öffnen der CSV.
Was ist BOM?
In der UCS-Kodierung gibt es ein Zeichen namens „ZERO WIDTH NO-BREAK SPACE“, dessen Kodierung FEFF ist. FFFE ist ein Zeichen, das in UCS nicht existiert und daher in der tatsächlichen Übertragung nicht vorkommen sollte. Die UCS-Spezifikation empfiehlt, dass wir vor der Übertragung des Bytestreams die Zeichen „ZERO WIDTH NO-BREAK SPACE“ übertragen. Wenn der Empfänger FEFF empfängt, zeigt er auf diese Weise an, dass der Bytestrom Big-Endian ist. Wenn er FFFE empfängt, zeigt er an, dass der Bytestrom Little-Endian ist. Daher wird das
-Zeichen „ZERO WIDTH NO-BREAK SPACE“ auch BOM genannt. UTF-8 erfordert keine BOM zur Angabe der Bytereihenfolge, kann jedoch die BOM zur Angabe der Codierungsmethode verwenden. Die UTF-8-Kodierung des Zeichens „ZERO WIDTH NO-BREAK SPACE“ ist EF BB BF. Wenn der Empfänger also einen Bytestrom empfängt, der mit EF BB BF beginnt, weiß er, dass dieser UTF-8-codiert ist. Windows verwendet BOM, um die Codierung von Textdateien zu markieren
Bevor der gesamte Inhalt ausgegeben wird
print(chr(0xEF).chr(0xBB).chr(0xBF));
Mehrere UTF-codierte BOM-Header
define ('UTF32_BIG_ENDIAN_BOM' , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF)); define ('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00)); define ('UTF16_BIG_ENDIAN_BOM' , chr(0xFE) . chr(0xFF)); define ('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE)); define ('UTF8_BOM' , chr(0xEF) . chr(0xBB) . chr(0xBF));
Vollständiger Code
header('Expires: 0'); header('Cache-control: private'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Content-Description: File Transfer'); header('Content-Encoding: UTF-8'); header('Content-type: text/csv; charset=UTF-8'); header('Content-Disposition: attachment; filename=Customers_Export.csv'); echo "\xEF\xBB\xBF"; // UTF-8 BOM // print(chr(0xEF).chr(0xBB).chr(0xBF));
Für weitere verwandte Informationen besuchen Sie bitte die PHP-Chinese-Website!
Das obige ist der detaillierte Inhalt vonWas tun, wenn PHP eine CSV-Datei mit verstümmelten Zeichen exportiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!