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.

