(PHP 5 >= 5.2.0, PHP 7, PHP 8)
SplFileObject::setCsvControl β Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ ΠΈ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ CSV-ΠΏΠΎΠ»Π΅ΠΉ
$separator = ",", string $enclosure = "\"", string $escape = "\\"): voidΠΠ΅ΡΠΎΠ΄ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° CSV-ΠΏΠΎΠ»Π΅ΠΉ.
separator
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ separator ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ
ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ».
enclosure
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ enclosure ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π³ΡΠ°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ
ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ»; ΡΠ°ΡΡΡ ΡΡΡΠΎΠΊΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ,
Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»-ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ.
escape
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ escape ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ
ΡΠΈΠΌΠ²ΠΎΠ» ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ»ΠΈ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ.
ΠΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° "" ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° enclosure
Π²Π½ΡΡΡΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΡΡ
ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ Π³ΡΠ°Π½ΠΈΡ
Π²Π΅ΡΠ½ΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°Π·Π±ΠΎΡΠ° Π²Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°
ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ» enclosure.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ escape ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ:
ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π° escape
ΠΏΠ΅ΡΠ΅Π΄ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ enclosure
ΠΎΠ±Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° Π²Π΅ΡΠ½ΡΡΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°Π·Π±ΠΎΡΠ°,
ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² CSV-ΡΡΡΠΎΠΊΠ° Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅
"a""b","c\"d" ΡΠ°Π·Π±Π΅ΡΡΡΡΡ Π½Π° Π΄Π²Π° ΠΏΠΎΠ»Ρ β
a"b ΠΈ c\"d.
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ PHP 8.4.0 Π²ΡΠ·ΠΎΠ² Π±Π΅Π· ΡΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° escape ΡΡΡΠ°ΡΠ΅Π».
Π‘ΠΈΠΌΠ²ΠΎΠ» ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΠΎ
ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ,
Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΏΡΠ΅Π΄ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
Π‘ΡΡΠΎΠΊΠ° Π² CSV-ΡΠΎΡΠΌΠ°ΡΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΡ Β»Β RFC 4180
ΠΈΠ»ΠΈ Π½Π΅ Π²ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ Ρ PHP-ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ
Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ CSV-ΡΡΡΠΎΠΊΠ°ΠΌΠΈ, Π΅ΡΠ»ΠΈ Π΄Π»Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ escape ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅,
ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ "".
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° escape β "\\",
ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡΡ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ PHP, Π½ΠΎ Π½Π΅ ΡΠ°Π½ΡΡΠ΅ PHP 9.0.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ValueError,
Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° separator ΠΈΠ»ΠΈ enclosure
Π½Π΅ ΡΠ°Π²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π±Π°ΠΉΡΡ.
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ValueError,
Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° escape Π½Π΅ ΡΠ°Π²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π±Π°ΠΉΡΡ ΠΈΠ»ΠΈ ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.
| ΠΠ΅ΡΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| 8.4.0 |
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π· ΡΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° escape
ΡΡΡΠ°ΡΠ΅Π».
|
| 7.4.0 |
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ escape ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ
Π΄Π»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
|
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ ΠΈ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ SplFileObject::setCsvControl()
<?php
$file = new SplFileObject("data.csv");
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl('|');
foreach ($file as $row) {
list ($fruit, $quantity) = $row;
// ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
}
?>Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° data.csv
<?php apples|20 bananas|14 cherries|87 ?>