Tri*_*tan 5 php csv decode symfony
我想解码 csv 文件,但其中一些有“;” 作为导致错误对象的分隔符。使用以下代码逗号分隔的 csv 文件正确解码:
https://symfony.com/blog/new-in-symfony-3-2-csv-and-yaml-encoders-for-serializer
// instantiation, when using it as a component
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\CsvEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
$serializer = new Serializer([new ObjectNormalizer()], [new CsvEncoder()]);
// instantiation, when using it inside the Symfony framework
$serializer = $container->get('serializer');
// encoding contents in CSV format
$serializer->encode($data, 'csv');
// decoding CSV contents
$data = $serializer->decode(file_get_contents('data.csv'), 'csv');
Run Code Online (Sandbox Code Playgroud)
我尝试在解码函数中将上下文设置为参数:
$context = array(";", '"', "\\", ",");
$data = $serializer->decode(file_get_contents($file), 'csv', $context);
Run Code Online (Sandbox Code Playgroud)
并作为构造函数中的参数:
$serializer = new Serializer([new ObjectNormalizer()], [new CsvEncoder($context)]);
Run Code Online (Sandbox Code Playgroud)
两者都尝试没有任何不同的结果。
我让它以这种方式工作:
$context = [
CsvEncoder::DELIMITER_KEY => ';',
CsvEncoder::ENCLOSURE_KEY => '"',
CsvEncoder::ESCAPE_CHAR_KEY => '\\',
CsvEncoder::KEY_SEPARATOR_KEY => ',',
];
$serializer = new Serializer([new ObjectNormalizer()], [new CsvEncoder()]);
$serializer = $this->get('serializer');
$data = $serializer->decode(file_get_contents($file), 'csv', $context);
Run Code Online (Sandbox Code Playgroud)
对于 Symfony 4,好的语法是:
$serializer = new Serializer([new ObjectNormalizer()], [new CsvEncoder()]);
$datas = $serializer->decode(file_get_contents($csvPath), 'csv', [CsvEncoder::DELIMITER_KEY => ';']);
Run Code Online (Sandbox Code Playgroud)
小智 1
尝试这个:
$context = ['csv_delimiter' => [",", '"', "\\", "."] ];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3838 次 |
| 最近记录: |