Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das Problem verstümmelter Zeichen, wenn PHP UTF-8-codierte CSV-Dateien generiert und diese mit Excel öffnet

So lösen Sie das Problem verstümmelter Zeichen, wenn PHP UTF-8-codierte CSV-Dateien generiert und diese mit Excel öffnet

伊谢尔伦
伊谢尔伦Original
2016-12-02 09:59:091296Durchsuche

Ursache: Die ausgegebene CSV-Datei enthält keine Stückliste.

Was ist Stückliste?

In der UCS-Codierung gibt es 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 Stückliste zur Angabe der Bytereihenfolge, kann die Stückliste jedoch zur Angabe der Kodierungsmethode 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 Kodierungsmethode von Textdateien zu markieren.

Wie gebe ich Stücklisten in PHP aus?

Bevor alle Inhalte ausgegeben werden

print(chr(0xEF).chr(0xBB).chr(0xBF));

Beispielcode:

<?php
    function writeCsvToFile($file,array $data){
        $fp = fopen($file, &#39;w&#39;);
        //Windows下使用BOM来标记文本文件的编码方式
        fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));
        foreach ($data as $line) {
            fputcsv($fp, $line);
        }
        fclose($fp);
    }


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