(PHP 5 >= 5.2.0, PHP 7, PHP 8)
SplFileObject::setCsvControl — Устанавливает символы разделителя, ограничителя и экранирования для CSV-полей
$separator = ",", string $enclosure = "\"", string $escape = "\\"): void Метод устанавливает символы разделителя полей, ограничителя значений полей и экранирования для разбора CSV-полей.
separator
Параметр separator устанавливает
символ-разделитель полей и принимает только один однобайтовый символ.
enclosure
Параметр enclosure устанавливает
символ-ограничитель значения поля и принимает только один однобайтовый символ.
escape
Параметр escape устанавливает
символ экранирования и принимает только один однобайтовый символ или пустую строку.
Пустая строка "" отключает внутренний механизм экранирования.
Обычно символ ограничителя значений — enclosure экранируется внутри поля путём удвоения;
однако как альтернативу разрешается использовать символ экранирования escape.
Поэтому для стандартных значений параметра смысл значений "" и \"
одинаков. Символ экранирования — escape не несёт отдельного смысла,
кроме экранирования символа ограничителя значений — enclosure;
он даже не экранирует сам себя.
Начиная с PHP 8.4.0 полагаться на значение по умолчанию,
которое содержит параметр escape, не рекомендуют.
Значение потребуется указать явно, позиционно
или как именованный аргумент.
Строка в CSV-формате иногда перестаёт соответствовать стандарту » RFC 4180
или не выдерживает обмена информацией с PHP-функциями
для работы с CSV-строками, если для символа экранирования escape устанавливают значение,
которое отличается от пустой строки "".
Значение по умолчанию для параметра escape — "\\",
поэтому рекомендуют явно указывать пустую строку. Значение по умолчанию изменят в будущей версии PHP, но не раньше PHP 9.0.
Функция не возвращает значения после выполнения.
Функция выбрасывает ошибку ValueError ,
если аргументы для разделителя полей separator или ограничителя значений enclosure
содержат значение короче одного байта.
Функция выбрасывает ошибку ValueError ,
если длина значения аргумента escape не равна одному байту или передали пустую строку.
| Версия | Описание |
|---|---|
| 8.4.0 |
Вызов функции без явной передачи значения в параметр escape
устарел.
|
| 7.4.0 |
Параметр escape теперь принимает пустую строку
для отключения внутреннего механизма экранирования.
|
Пример #1 Пример установки символов разделителя, ограничителя и экранирования методом SplFileObject::setCsvControl()
<?php
$file = new SplFileObject("data.csv");
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl('|');
foreach ($file as $row) {
list ($fruit, $quantity) = $row;
// Обрабатываем значения
}
?>Содержимое файла data.csv
<?php apples|20 bananas|14 cherries|87 ?>