php fgetcsv 没有环绕符,PHP fgetcsv()和str_getcsv()没有在Delimiter旁边使用Double Enclosure进行解析...

我必须用PHP解析一个CSV文件 . CSV文件由客户端提供,我无法控制格式 . 它以逗号分隔,并使用双引号作为文本限定符 . 但是,如果某个字段(如地址字段)中包含逗号,则客户端的系统会在另一组双引号中围绕该字段 . 例如:

"9999X111","X1110000110105","John Doe",""123 Central Park Avenue, #108"","New York NY 10006 ","","","M","0","1","370.20"

如您所见,第4个字段(第3个索引)在整个字段周围有一组额外的双引号 . 如果我通过fgetcsv()或str_getcsv()发送此字符串,则无法正确处理该字段 .

Unwanted Result Array:

[0] => 9999X111

[1] => X1110000110105

[2] => John Doe

[3] => 555 Central Park Avenue

[4] => #108""

[5] => New York NY 10006

如果我手动删除额外的双引号组,则使用任一函数正确处理该行;但是,我无法在 生产环境 环境中执行此操作 .

Preferred Result Array:

[0] => 9999X111

[1] => X1110000110105

[2] => John Doe

[3] => 555 Central Park Avenue, #108

[4] => New York NY 10006

这是我正在使用的当前代码:

$fileCHG = fopen($fileloc['InputFile'], "r");

$cnt = 0;

while(!feof($fileCHG)) {

$chg[$cnt] = fgetcsv($fileCHG,0,",","\"");

if($chg[$cnt]=="") { //Unset Any Blank Arrays

unset($chg[$cnt]);

}

$cnt++;

}

我已经尝试了各种各样的建议,来自Stack Overflow,PHP手册等等,似乎无法让它工作 . 即使我用反斜杠手动转义内部双引号集,我仍然得到不正确的结果数组 . 无论我如何使用这两种功能,我的脚本都会陷入困境并尝试将字段拆分为“Avenue”之后的逗号,并忽略剩余的“” .

我觉得这个PHP网站上的评论可能正在解释发生了什么,但作为一个新的编码器,我无法想象实际发生了什么 .

我也尝试了以下建议(在众多中)无济于事 .

这种方法可行;但它要求每行的字段数相同 .

我在Mac OS X 10.8上使用PHP 5.3.27 .

提前谢谢你看看 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值