Versions

Force field enclosure

Available since version 9.1.0

The EncloseField is a PHP stream filter which forces the Writer class to enclose all its record fields.

Changing the CSV objects control characters after registering the stream filter may result in unexpected returned records.

Usage with Writer objects

public static EncloseField::addTo(Writer $csv, string $sequence): Writer

The EncloseField::addTo method will:

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 field enclosed

The $sequence argument should be a sequence containing at least one character that forces fputcsv to enclose the field value. If not, an InvalidArgumentException exception will be thrown.

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:

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);