fputcsv() и русский текст, проблема с кодировкой

среда, 26 октября 2016 г.

Есть прекрасная функция fputcsv(), которая помогает быстро и безболезненно записывать данные в csv файл.

Но если вы попробуете записать русский текст, то вы в итоговом файле увидите, что есть проблема с кодировкой. Выглядит это примерно так:



И даже несмотря на то, что данные у вас в UTF-8!

А вот как выглядит код, который делает то, что показано на картинке:

$fp = fopen('testcsv.csv', 'w');
fputcsv($fp, array('Item', 'Столбец 1', 'Данные'), ';');
fclose($fp);

Так вот чтобы проблемы с кодировкой не было, надо всего лишь добавить 3 байта в файл. Это BOM (Byte Order Mark). Код получится следующим:

$fp = fopen('testcsv.csv', 'w');
fputs($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // BOM
fputcsv($fp, array('Item', 'Столбец 1', 'Данные'), ';');
fclose($fp);

Теперь данные будут выглядеть корректно:

Copyright © 2010 WEB IT blog