Force field enclosure

This class is deprecated as of version 9.10.0. Please use the Writer::forceEnclosure method instead.

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.

Deprecated since version 9.10.0. You should instead use the Writer::forceEnclosure method for better results and improved DX. Please refer to its documentation for more informations.

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 force fputcsv 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

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:

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