Heim  >  Artikel  >  Backend-Entwicklung  >  Wie löse ich die verstümmelte CSV-Datei, die von utf8-codiertem PHP exportiert wurde?

Wie löse ich die verstümmelte CSV-Datei, die von utf8-codiertem PHP exportiert wurde?

青灯夜游
青灯夜游Original
2020-08-17 10:43:034447Durchsuche

Methoden zum Auflösen verstümmelter Zeichen: 1. Verwenden Sie die Funktion iconv, um utf8 in GBK zu transkodieren, Syntax „$str = iconv('utf-8', 'GBK//IGNORE', $str));"; Geben Sie den Stücklistenkopf aus, bevor Sie den Inhalt ausgeben, damit Excel automatisch erkennen kann, dass es sich um UTF-8 handelt.

Wie löse ich die verstümmelte CSV-Datei, die von utf8-codiertem PHP exportiert wurde?

Empfohlen: "PHP-Video-Tutorial

Eigentlich erforderlich Es geht darum, Daten nach Excel zu exportieren. Da fällt mir natürlich die berühmte PHPExcel-Bibliothek ein. Diese Bibliothek ist sehr leistungsfähig, benötigt aber viel Speicher. Mit mehr als 100.000 Daten ist es grundsätzlich schwierig, sie in Webanfragen zu vervollständigen. Daher besteht immer noch die Notwendigkeit, natives PHP zu verwenden, um leichtgewichtige CSV-Dateien zu exportieren.

Unter normalen Umständen werden beim Exportieren von UTF-8-codierten regulären Inhalten in CSV diese beim Öffnen mit Excel verstümmelt, ganz zu schweigen von einigen nicht gängigen Zeichen oder Emoji-Ausdrücken. Der Grund für den verstümmelten Code liegt darin, dass unter dem Windows-System das Standard-Excel mithilfe der GBK-Codierung analysiert wird. Heutzutage gibt es keine Kodierung, die UTF-8 verwendet. Wenn dies der Fall ist, verwenden bekannte Produkte von großen Unternehmen GBK und andere Kodierungsversionen, um etwas Datenverkehr einzusparen.

Um das Problem verstümmelter Zeichen zu lösen, besteht der Ansatz in PHP im Allgemeinen darin, die Funktion iconv zum Transkodieren in GBK zu verwenden, sodass beim standardmäßigen Öffnen von Excel keine Probleme auftreten. Bei gängigen Zeichen wie Emoji-Ausdrücken kann GBK diese jedoch nicht anzeigen. Wenn die Transkodierung fehlschlägt, sind die Zeichen leer. Sie können das Tag //IGNORE hinzufügen, um sie zu ignorieren, sodass sie ignoriert werden und andere normale Zeichen beibehalten werden können.

$str = iconv('utf-8', 'GBK//IGNORE', $str));

Das kann man als Kompromiss bezeichnen. Kann ich UTF-8 direkt ohne Transkodierung ausgeben? Erkennt Excel UTF-8 nicht automatisch und verwendet UTF-8 zum Dekodieren und Anzeigen? Tatsächlich ist es möglich, aber es erfordert einen BOM-Header (so etwas gibt es in der Nicht-Windows-Welt nicht). Mit diesem BOM-Header kann erkannt werden, dass es sich um UTF-8 handelt. Andernfalls kann es nicht erkannt und verwendet werden das Standard-GBK, um es zu verarbeiten. Natürlich ist es nur Kauderwelsch. Wie Sie den sogenannten BOM-Header korrekt ausgeben, sehen Sie sich den Code an:

$fp = fopen('./test_csv.csv', 'a');
fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));//输出BOM头
fputcsv($fp, ['标题']);
fputcsv($fp, ['解决乱码']);
fclose($fp);

Der obige persönliche Test kann die sogenannten verstümmelten Zeichen und die normale Anzeige von Nicht-Mainstream-Zeichen wie Emoji-Ausdrücken lösen.

Das obige ist der detaillierte Inhalt vonWie löse ich die verstümmelte CSV-Datei, die von utf8-codiertem PHP exportiert wurde?. 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