Heim >Backend-Entwicklung >PHP-Problem >So lösen Sie verstümmelte CSV-Ausgaben von PHP

So lösen Sie verstümmelte CSV-Ausgaben von PHP

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼Original
2019-09-27 09:14:222737Durchsuche

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!

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