Heim >Backend-Entwicklung >PHP-Problem >So lösen Sie verstümmelte CSV-Ausgaben von PHP
Wenn wir an einem Projekt in einer Fremdsprache arbeiten, 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.
Verwandte Empfehlungen: „php-Tutorial“
Was ist Stückliste
in der UCS-Kodierung? Dort ist ein Zeichen namens „ZERO WIDTH NO-BREAK SPACE“ und seine Codierung ist FEFF. 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 Kodierung von Textdateien zu markieren.
Bevor alles ausgegeben wird
print(chr(0xEF).chr(0xBB).chr(0xBF));
Ein paar UTF-codierte Stücklistenköpfe
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 vonSo lösen Sie verstümmelte CSV-Ausgaben von PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!