PHP处理csv文件时,正确处理单元格内多余的逗号。

23-09-07 12:00 字数 836 阅读 3130

一般处理csv内容时,php多用explode(",", $csvLine),但是有些csv单元格内有多余的英文逗号,如下面的从腾讯云日志里导出的nginx日志。

remote_addr,request_body,request_method,request_time
10.0.0.35,"{\x22logDatas\x22:\x22[{\x5C\x22orderId\x5C\x22:\x5C\x2220731922\x5C\x22,\x5C\x22oldDeductTime\x5C\x22:\x5C\x22\x5C\x22,\x5C\x22oldExpressTime\x5C\x22:\x5C\x22\x5C\x22,\x5C\x22operType\x5C\x22:\x5C\x223\x5C\x22}]\x22,\x22sourceTag\x22:\x22erp\x22}",POST,5.063,

request_body 这一列里的内容比较复杂有多余逗号,直接用,分隔,处理后的内容就会和我们预想的结果不一样,如何处理呢,或者wps这种软件是如何正确识别的呢,仔细观察发现,这种特殊的单元格内容使用双引号包裹的,所以就是分隔单元格时,要排除双引号包裹的逗号,代码如下

$content = file_get_contents(__DIR__ . '/export-85867e21-492e-4c2a-a656-2f52b91575a3.csv');
$list = explode("\n", $content);
array_shift($list);
foreach ($list as $item) {
    // 主要是这样代码
    $itemList = preg_split('/,(?=(?:(?:[^"]*"){2})*[^"]*$)/', $item);
    var_dump($itemList);
    exit;
}
0人点赞>
关注 收藏 改进 举报
0 条评论
排序方式 时间 投票
快来抢占一楼吧
请登录后发表评论
站长 @ 十七度
文章
384
粉丝
23
喜欢
195
收藏
31
排名 : 1
访问 : 146.22万
私信