CSV (Comma Separated Values - значения, разделяемые запятой) - это файловый формат, в который многие приложения могут экспортировать данные. Кажется, что с помощью explode() очень просто превратить значения CSV в массивы; однако на самом деле это очень сложно. Что будет, если запятая встретится внутри значения? В этом случае содержимое берется в двойные кавычки, и использовать explode() становится затруднительно. Как всегда, группа разработчиков PHP выполнила всю необходимую работу и предложила функцию fgetcsv(). Она действует так же, как fgets(), но преобразует строку в массив, разделяя содержимое по запятым (или любым другим символам, указанным в третьем параметре). Второй параметр функции fgetcsv() представляет максимальную длину строки в файле csv. В PHP 5.0.0 и более поздних версиях этот параметр необязательный, но в ранних версиях его необходимо указывать. Поэтому следует проверять длину наибольшей строки, иначе данные будут усечены.
Код <table> <?php $fp = fopen('file.csv', 'r'); while (!feof($fp)){ $line = fgetcsv($handle, 4096); echo '<tr><td>'; echo implode('</td><td>', htmlspecialchars ($line)); echo '</td></tr>'; } fclose($fp); ?> </table>
Приведенный код, читает файл CSV и выдает его в виде таблици HTML. Для этого используется следующий взятый в цикл код:
Код $line = fgetcsv($handle, 4096); echo '<tr><td>'; echo implode('</td><td>', htmlspecialchars ($line)); echo '</td></tr>';
Для записи файлов PHP предлагает функцию fputcsv(). Вы предоставляете указатель на файл и массив значений, а PHP делает все остальное, включая обработку специальных символов. К сожалению, в настоящее время данная функция существует только в CSV от PHP, поэтому приходится вручную импортировать нужное поведение. Кроме того, нужно позаботиться о запятых внутри элементов, поэтому все значения берутся в двойные кавычки. Если элемент содержит двойные кавычки, их нужно представить как специальный символ. В данном случае это выполняется не через добавление обратной косой черты, а путем удвоения кавычек. Ниже приводится пример приемлемой строки данных CSV:
Код Quote, "And she said: ""No."" ...", Unknown
Код функции fputcsv() записывается следующим образом:
Код if (!function_exists('fputcsv')) { function fputcsv($fp, $line, $separator = ',') { for ($i=0; $i < count($line); $i++) { if (false !== strpos($line[$i], '"')) { $line[$i] = ereg_replace('"', '""', $line[$i]); } if (false !== strpos($line[$i], $separator) || false !== strpos($line[$i], '"')) { $line[$i] = '"' . $line[$i] . '"'; } } fwrite($fp, implode($separator, $line) . "\r\n"); } } |