首页 > 解决方案 > Laravel 7 - 解析和导入带有欧元符号的 CSV

问题描述

晚上好,我尝试了我在互联网上找到的所有代码来解决这个愚蠢的问题......我希望你有一个解决方案。

我有一个 CSV 文件,其中包含一个包含 €(欧元)符号的字段。

基于Notepad++,文件编码为ANSI。

我需要解析它并将其以 json 格式导入数据库。

$path = $request->file('csv_file')->getRealPath();
$delimiter = ';';
$data = array_map(function($str) use ($delimiter) {
  return str_getcsv($str, $delimiter);
}, file($path));

... some stuff ....

$csvDataFile = CsvData::create([
            'csv_filename' => $request->file('csv_file')->getClientOriginalName(),
            'csv_header' => $request->has('header'),
            'csv_data' => json_encode(array_slice($data,1)),
            'csv_info' => json_encode($request->csv_info),
]);

DB 上的 csv_data 字段为 0,因为 € 符号破坏了 json_encode 函数。

我试图用空字符替换它:preg_replace('/\x{20AC}/u', '', $line);逐行扫描数组,但 € 符号不再相同(既不是 €,也不是 \x20AC )。

我还尝试使用 `fgets 将整个文件作为字符串读取,并在那里替换 € 符号,但它没有明确存在。

我终于尝试了这里报告的解决方案fgetcsv() 丢弃带有变音符号的字符(即非 ASCII) - 如何解决?...但它似乎不起作用。

有什么聪明的解决方案吗?

谢谢!

标签: phpcsvlaravel-7

解决方案


推荐阅读