Heim  >  Artikel  >  Backend-Entwicklung  >  Was tun, wenn PHP eine CSV-Datei mit verstümmelten Zeichen exportiert?

Was tun, wenn PHP eine CSV-Datei mit verstümmelten Zeichen exportiert?

藏色散人
藏色散人Original
2020-07-11 09:05:233228Durchsuche

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 .

Was tun, wenn PHP eine CSV-Datei mit verstümmelten Zeichen exportiert?

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!

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