Force field enclosure
The EncloseField
is a PHP stream filter which forces the Writer
class to enclose all its record fields.
Usage with Writer objects
public static EncloseField::addTo(Writer $csv, string $sequence): Writer
The EncloseField::addTo
method will:
- register the stream filter if it is not already the case.
- add a formatter to the
Writer
object to forcefputcsv
to enclose all record fields. - add a stream filter to the
Writer
object to remove the added sequence from the final CSV.
use League\Csv\EncloseField;
use League\Csv\Writer;
$writer = Writer::createFromPath('php://temp');
EncloseField::addTo($writer, "\t\x1f"); //adding the stream filter to force enclosure
$writer->insertAll($iterable_data);
$writer->output('mycsvfile.csv'); //outputting a CSV Document with all its fields enclosed
Usage with PHP stream resources
public static EncloseField::register(): void
public static EncloseField::getFiltername(): string
To use this stream filter outside League\Csv
objects you need to:
- register the stream filter using
EncloseField::register
method. - use
EncloseField::getFiltername
with one of PHP’s attaching stream filter functions with the correct arguments as shown below:
use League\Csv\EncloseField;
EncloseField::register();
$sequence = "\t\x1f";
$resource = fopen('/path/to/my/file', 'r+');
$filter = stream_filter_append($resource, EncloseField::getFiltername(), STREAM_FILTER_WRITE, [
'sequence' => $sequence,
]);
$record = array_map(function ($value) use ($sequence) {
return $sequence.$value;
}, $record);
fputcsv($resource, $record);