Heim  >  Artikel  >  Backend-Entwicklung  >  Was tun, wenn PHP verstümmelte CSV-Zeichen ausgibt?

Was tun, wenn PHP verstümmelte CSV-Zeichen ausgibt?

藏色散人
藏色散人Original
2021-03-01 17:59:432226Durchsuche

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.

Was tun, wenn PHP verstümmelte CSV-Zeichen ausgibt?

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!

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