Once your object is instantiated you can optionally set several CSV properties. The following methods works on both the Reader and the Writer class.
$file = new SplTempFileObject();
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl('|');
$csv = Reader::createFromFileObject($file);
echo $csv->getDelimiter(); //display '|'
public AbstractCsv::setDelimiter(string $delimiter): AbstractCsv
public AbstractCsv::getDelimiter(void): string
use League\Csv\Reader;
$csv = Reader::createFromPath('/path/to/file.csv', 'r');
$csv->setDelimiter(';');
$delimiter = $csv->getDelimiter(); //returns ";"
The default delimiter character is ,.
public AbstractCsv::setEnclosure(string $delimiter): AbstractCsv
public AbstractCsv::getEnclosure(void): string
use League\Csv\Writer;
$csv = Writer::createFromPath('/path/to/file.csv');
$csv->setEnclosure('|');
$enclosure = $csv->getEnclosure(); //returns "|"
The default enclosure character is ".
public AbstractCsv::setEscape(string $delimiter): AbstractCsv
public AbstractCsv::getEscape(void): string
use League\Csv\Reader;
$csv = Reader::createFromPath('/path/to/file.csv', 'r');
$csv->setEscape('\\');
$escape = $csv->getEscape(); //returns "\"
The default escape character is \.
This method allow you to find the occurrences of some delimiters in a given CSV object.
public AbstractCsv::fetchDelimitersOccurrence(
array $delimiters,
int $nbRows = 1
): array
The method takes two arguments:
1);use League\Csv\Reader;
$reader = Reader::createFromPath('/path/to/your/csv/file.csv', 'r');
$reader->setEnclosure('"');
$reader->setEscape('\\');
$delimiters_list = $reader->fetchDelimitersOccurrence([' ', '|'], 10);
// $delimiters_list can be the following
// [
// '|' => 20,
// ' ' => 0,
// ]
// This seems to be a consistent CSV with:
// - the delimiter "|" appearing 20 times in the 10 first rows
// - the delimiter " " never appearing
The following properties only affect the CSV object when you are writing and/or saving data to it.
To improve interoperability with programs interacting with CSV, the newline sequence is appended to each CSV newly inserted line.
public AbstractCsv::setNewline(string $sequence): AbstractCsv
public AbstractCsv::getNewline(void): string
use League\Csv\Writer;
$csv = Writer::createFromPath('/path/to/file.csv');
$csv->setNewline("\r\n");
$newline = $csv->getNewline(); //returns "\r\n"
The default newline sequence is \n;
To improve interoperability with programs interacting with CSV, you can manage the presence of the BOM sequence in your CSV content.
public AbstractCsv::getInputBOM(void): string
Detect the current BOM character is done using the getInputBOM method. This method returns the currently used BOM character or an empty string if none is found or recognized.
use League\Csv\Writer;
$csv = Writer::createFromPath('/path/to/file.csv');
$bom = $csv->getInputBOM();
public AbstractCsv::setOutputBOM(string $sequence): AbstractCsv
public AbstractCsv::getOutputBOM(void): string
setOutputBOM: sets the outputting BOM you want your CSV to be associated with.getOutputBOM: get the outputting BOM you want your CSV to be associated with.use League\Csv\Reader;
$csv = Reader::createFromPath('/path/to/file.csv', 'r');
$csv->setOutputBOM(Reader::BOM_UTF8);
$bom = $csv->getOutputBOM(); //returns "\xEF\xBB\xBF"
BOM character is set to an empty string.AbstractCsv class provide constants to ease BOM sequence manipulation.To convert your CSV document into another format it must be encoded in UTF-8.
When this is not the case, you should transcode it first using the library stream filtering mechanism. When this is not applicable you should provide the CSV original encoding charset to the CSV object using the following methods.
public AbstractCsv::setInputEncoding(string $sequence): AbstractCsv
public AbstractCsv::getInputEncoding(void): string
public AbstractCsv::setEncodingFrom(string $sequence): AbstractCsv
public AbstractCsv::getEncodingFrom(void): string
AbstractCsv::setEncodingFrom is replaced by AbstractCsv::setInputEncodingAbstractCsv::getInputEncoding is replaced by AbstractCsv::getEncodingFromuse League\Csv\Reader;
$csv = Reader::createFromPath('/path/to/file.csv', 'r');
$csv->setInputEncoding('iso-8859-15');
echo $csv->getInputEncoding(); //returns iso-8859-15;
By default getInputEncoding returns UTF-8 if setInputEncoding was not used.
use League\Csv\Reader;
$reader = Reader::createFromFileObject(new SplFileObject('/path/to/bengali.csv'));
//we are using the setInputEncoding method to transcode the CSV into UTF-8
$reader->setInputEncoding('iso-8859-15');
echo json_encode($reader);
//the CSV is transcoded from iso-8859-15 to UTF-8
//before being converted to JSON format;
echo $reader; //outputting the data is not affected by the conversion
How can I help you explore Laravel packages today?