php fgetcsv不是正确的分割数据

yr9zkbsy  于 2022-12-10  发布在  PHP
关注(0)|答案(3)|浏览(250)

我正在导入csv文件以将数据上传到数据库。但在某些产品中,描述不正确。描述如下
TSD/UHC UG-132型,6英寸气体左轮手枪,带塑料 shell 。 shell :MUG 131和MUG 131黄铜。290-320 FPS,带.20g BBS。

法律的免责声明
**限制:**您必须年满18岁才能订购本产品。在某些地区,州与地方法律会进一步限制或禁止销售与拥有本产品。订购本产品,即表示您保证已年满18岁,并满足您所在辖区购买本产品的法律的要求。
**警告:**本产品可能会被执法人员或其他人误认为是枪支,改变其颜色或在公共场合挥舞本产品可能会被视为犯罪。

但是当我打印fgetcsv数组时,它会在不同数组中显示此描述,如。
[2]=〉TSD/UHC UG-132型,6英寸气体左轮手枪,带塑料 shell 。 shell :MUG 131和MUG 131黄铜。290-320 FPS,带.20g BBS。法律的免责声明
限制条件:您必须年满18岁才能订购本产品。在某些地区[3] =〉州和地方法律进一步限制或禁止销售和拥有本产品。订购本产品[4] =〉即表示您已年满18岁,并满足您所在辖区购买本产品的法律的要求。
警告:本产品可能被执法人员或其他人误认为是枪支[5] =〉,改变其颜色或在公共场合挥舞本产品可能被视为犯罪。

我也有更多的产品与这种描述与反斜杠,单quot和双quot。一些其他产品上传正确,但有些有问题。
谢谢

ct2axkht

ct2axkht1#

fgetcsv($handle, 0, ",", '"', '""');

t40tm48m

t40tm48m2#

尝试

fgetcsv($handle, 0, ",", '"', '\\');

它使用逗号(,)作为分隔符,除非它是用“;如果“作为字符出现在字段中,则必须使用
如果逗号不是分隔符,则需要使用适当的分隔符

4si2a6ki

4si2a6ki3#

我有一个类似的问题,并尝试了许多不同的方法,但没有预处理和清理整个文件,这是唯一的工作解决方案:

$handle = fopen($filepath, "r");
if ($handle === false) {
    throw new someException('fopen error');
}

$rowNumber = 1;
while (($data = fgetcsv($handle, 0, ',', '"', "\0")) !== false) {
    yield $rowNumber => $data;
    $rowNumber++;
}
fclose($handle);

我在这里找到了可行的解决方案:https://stackoverflow.com/a/46342634/5356216
代码和示例数据的更多详细信息:https://stackoverflow.com/a/74721279/5356216

相关问题