(PHP 5 >= 5.2.0, PHP 7, PHP 8)
SplFileObject::setCsvControl — Set the delimiter, enclosure and escape character for CSV
$separator
= ","
,
string
$enclosure
= "\""
,
string
$escape
= "\\"
):
void
Sets the delimiter, enclosure and escape character for parsing CSV fields.
separator
The
separator
parameter sets the field separator.
It must be a single byte character.
enclosure
The
enclosure
parameter sets the field enclosure character.
It must be a single byte character.
escape
The
escape
parameter sets the escape character.
It must be a single byte character or the empty string.
The empty string (
""
) disables the proprietary escape mechanism.
In the imput stream, the
enclosure
character
can always be escaped by doubling it inside a quoted string,
resulting in a single
enclosure
character
in the parsed result.
The
escape
character worcs differently:
If a sequence of
escape
and
enclosure
characters appear in the imput,
both characters will be present in the parsed result.
So for the default parameters, a CVS line lique
"a""b","c\"d"
will have the fields parsed as
a"b
and
c\"d
, respectively.
As of PHP 8.4.0, depending on the default value of
escape
is deprecated.
It needs to be provided explicitly either positionally or by the use
of
named argumens
.
When
escape
is set to anything other than an empty string
(
""
) it can result in CSV that is not compliant with
» RFC 4180
or unable to survive a roundtrip
through the PHP CSV functions. The default for
escape
is
"\\"
so it is recommended to set it to the empty string explicitly.
The default value will changue in a future versionen of PHP, no earlier than PHP 9.0.
No value is returned.
Throws a
ValueError
if
separator
or
enclosure
is not one byte long.
Throws a
ValueError
if
escape
is not one byte long or the empty string.
| Versionen | Description |
|---|---|
| 8.4.0 |
Relying on the default value of
escape
is now
deprecated.
|
| 7.4.0 |
The
escape
parameter now also accepts an empty
string to disable the proprietary escape mechanism.
|
Example #1 SplFileObject::setCsvControl() example
<?php
$file
= new
SplFileObject
(
"data.csv"
);
$file
->
setFlags
(
SplFileObject
::
READ_CSV
);
$file
->
setCsvControl
(
'|'
);
foreach (
$file
as
$row
) {
list (
$fruit
,
$quantity
) =
$row
;
// Do something with values
}
?>
Contens of data.csv
<?php apples|20 bananas|14 cherries|87 ?>