@Kirill-Gorelov
С ума с IT

Запись в csv в нужной кодировке на php?

Всем привет. Ребят, записываю в csv файл массив, все супер, НО в экселе кракозябры, а если смотреть через notepad, то все хорошо.
Для записи в файл, использую класс
class CSV {

    private $_csv_file = null;

    /**
     * @param string $csv_file  - путь до csv-файла
     */
    public function __construct($csv_file) {
        if (file_exists($csv_file)) { //Если файл существует
            $this->_csv_file = $csv_file; //Записываем путь к файлу в переменную
        }
        else throw new Exception("Файл \"$csv_file\" не найден"); //Если файл не найден то вызываем исключение
    }

    public function setCSV(Array $csv) {
        $handle = fopen($this->_csv_file, "a"); //Открываем csv для до-записи, если указать w, то  ифномация которая была в csv будет затерта

        foreach ($csv as $value) { //Проходим массив
            fputcsv($handle, explode(";", $value), ";"); //Записываем, 3-ий параметр - разделитель поля
        }
        fclose($handle); //Закрываем
    }

    /**
     * Метод для чтения из csv-файла. Возвращает массив с данными из csv
     * @return array;
     */
    public function getCSV() {
        $handle = fopen($this->_csv_file, "r"); //Открываем csv для чтения

        $array_line_full = array(); //Массив будет хранить данные из csv
        while (($line = fgetcsv($handle, 0, ";")) !== FALSE) { //Проходим весь csv-файл, и читаем построчно. 3-ий параметр разделитель поля
            $array_line_full[] = $line; //Записываем строчки в массив
        }
        fclose($handle); //Закрываем файл
        return $array_line_full; //Возвращаем прочтенные данные
    }

}


Как сделать, что бы записалось сразу нормальный вид?
  • Вопрос задан
  • 2757 просмотров
Решения вопроса 2
DevMan
@DevMan
1 опытным путём выяснить нужную экселю кодировку.
2 приводить к этой кодировке при помощи iconv.
Ответ написан
Комментировать
Palehin
@Palehin
Frontend
Сам недавно столкнулся с проблемой кодировки при записи в csv.
Экселю нужна кодировка windows-1251. Используйте функцию iconv для кодирования данных перед сохранением в файл.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы