Heim > Artikel > Backend-Entwicklung > Was tun, wenn PHP verstümmelte CSV-Zeichen ausgibt?
Die Lösung für die verstümmelte CSV-Ausgabe durch PHP: Öffnen Sie zuerst die entsprechende Codedatei, geben Sie dann den BOM-Header am Anfang der Datei aus und teilen Sie Windows die Kodierungsmethode der CSV-Datei mit. Lassen Sie Excel beim Öffnen die richtige Kodierung verwenden die CSV.
Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP Version 7.1, Dell G3-Computer.
Lösung für verstümmelte Zeichen beim Exportieren von CSV-Dateien aus PHP
Wenn wir bei Projekten auf die Verwendung von Fremdsprachen stoßen, 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 beim Öffnen die richtige Kodierung verwenden kann 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 erscheinen 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
Das Zeichen „ZERO WIDTH NO-BREAK SPACE“ wird 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 Kodierung von Textdateien zu markieren.
【Empfohlenes Lernen: „PHP-Video-Tutorial“】
Bevor alle Inhalte ausgegeben werden
print(chr(0xEF).chr(0xBB).chr(0xBF));
Mehrere UTF-codierte Stücklisten-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));
Das obige ist der detaillierte Inhalt vonWas tun, wenn PHP verstümmelte CSV-Zeichen ausgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!