The League of Extraordinary Packages

Our Packages:

Presented by The League of Extraordinary Packages

Getting Started

Connections Settings

Inserting Records

Selecting Records

Interoperability

Converting Records

Upgrading Guide

Force field enclosure

Available since version 9.1.0

<?php
class EncloseField extends php_user_filter
{
    public static function addTo(Writer $csv, string $sequence): Writer
    public static function getFiltername(): string
    public static function register(): void
}

The EncloseField force 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

<?php

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

The EncloseField::addTo method will:

<?php

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

<?php

public static EncloseField::register(): void
public static EncloseField::getFiltername(): string

To use this stream filter outside League\Csv objects you need to:

<?php

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