Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия | |||
|
csv [2022/02/06 00:20] a1 удалено |
— (текущий) | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | Для отсутствия граблей оформляем файл в соответствии со стандартом RFC 4180 со следующими изменениями: | ||
| - | 1). Файл должен быть сохранен в UTF-8 без BOM | ||
| - | |||
| - | 2). Все значения полей csv должны быть заключены в двойные кавычки (") | ||
| - | |||
| - | 3). Поля должны быть разделены (;) | ||
| - | |||
| - | 4). Поля не должны содержать переводов строки (\n) | ||
| - | |||
| - | 5). Все печатные служебные символы (;"\) внутри полей должны быть экранированы обратным слешем (\) | ||
| - | |||
| - | Пакеты MS Excel и OpenOffice некорректно читают экранирование в csv формате, | ||
| - | поэтому для быстрой правки используем LibreOffice | ||
| - | |||
| - | Пример: | ||
| - | |||
| - | "name";"description"; | ||
| - | |||
| - | "Наименование";"<span clss=\"red\">Красный текст</span>"; | ||
| - | |||
| - | "Наименование";"<span clss=\"blue\">Синий текст</span>"; | ||
| - | |||
| - | Запись данных csv: | ||
| - | |||
| - | <code php> | ||
| - | //Преобразовать тектовое значение в поле csv | ||
| - | function csv_quote($text) { | ||
| - | $text=trim($text); | ||
| - | $text=str_replace("\r\n",'', $text); | ||
| - | $text=str_replace("\n",'', $text); | ||
| - | $text=str_replace('"','\\"', $text); | ||
| - | $text=str_replace(';','\\;', $text); | ||
| - | return '"'.$text.'";'; | ||
| - | } | ||
| - | |||
| - | //Сохранить массив в csv. Ключи первого элемента запишутся как заголовки | ||
| - | function save_csv($filename, $items){ | ||
| - | $keys = array_keys($items[0]); | ||
| - | foreach($keys as $key) { | ||
| - | $content.= csv_quote($key); | ||
| - | } | ||
| - | $content.="\n"; | ||
| - | foreach($items as $item) { | ||
| - | foreach($item as $value) { | ||
| - | $content .= csv_quote($value); | ||
| - | } | ||
| - | $content.="\n"; | ||
| - | } | ||
| - | file_put_contents($filename, $content); | ||
| - | } | ||
| - | |||
| - | Чтение данных CSV: | ||
| - | |||
| - | $fp = fopen($filename, "rt"); | ||
| - | $data=fgetcsv($fp,0,";"); | ||
| - | fclose($fp); | ||
| - | |||
| - | </code> | ||