CSV

Коротко

Текстовый формат таблиц: каждая строка файла — запись, а значения внутри неё разделены запятой, точкой с запятой или другим символом.

Что такое «CSV»

Название расшифровывается как Comma-Separated Values — «значения через запятую». Формат появился задолго до интернета и выжил благодаря простоте: CSV открывает любой табличный редактор, понимает любой язык программирования, а сам файл можно прочитать глазами в блокноте. Поэтому через него выгружают товары из 1С, импортируют прайсы поставщиков, переносят клиентов между CRM и отдают отчёты бухгалтерии.

Общепринятое описание формата есть в RFC 4180, но на практике его соблюдают не все программы, и отсюда большинство проблем.

Пример файла и правила кавычек

sku;name;price;description
A-101;Стул "Венский";4500;"Бук; лак"
A-102;Стол;12900;"Две строки
в описании"

Если значение содержит разделитель, перенос строки или кавычку, его заключают в двойные кавычки, а кавычку внутри удваивают: "Стул ""Венский""". Во второй строке примера кавычки стоят внутри значения без обрамления — так делают многие выгрузки, и строгий парсер может на ней споткнуться.

Три частые ловушки

  • Разделитель. Excel с русскими региональными настройками сохраняет CSV через точку с запятой, потому что запятая занята под дробную часть. Скрипт, ожидающий запятую, увидит одну колонку.
  • Кодировка. Файл в UTF-8 без BOM Excel может открыть как Windows-1251 и показать кракозябры, а файл из старой 1С может прийти именно в Windows-1251. Кодировку стоит проверять до импорта; про символы и кодировки — в статье про Unicode.
  • Типы. CSV хранит только текст: артикул 00125 табличный редактор превратит в число 125, длинный штрихкод — в экспоненту.

Как читать CSV в PHP

Надёжнее встроенной функции fgetcsv(), чем разбивки строки по разделителю: она учитывает кавычки и переносы внутри значений.

$fh = fopen('price.csv', 'r');
while (($row = fgetcsv($fh, 0, ';')) !== false) {
    [$sku, $name, $price] = $row;
}
fclose($fh);

В WooCommerce есть встроенный импорт и экспорт товаров в CSV, в 1С-Битрикс — импорт каталога из CSV в административном разделе. Если нужны вложенные структуры, удобнее JSON или XML.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение