首先需求是:从一个文本中读取相关内容(a.txt),利用分隔符把读取的内容转成数组,再将数组处理后用fputcsv函数追加的指定的csv文件当中(b.csv)。
需求的条件:1、读取的文件是windows下默认的UTF-8文件(带有BOM),csv文件也是UTF-8(带有BOM)的文件
问题来了:程序调试过程中,因为读取的内容有中文,所以要用iconv函数进行转码,正常输出数组没有问题。但当要写入b.csv文件时,第一个属性值莫名奇妙没了。
看代码php
header("Content-Type:text/html;charset=utf-8");
$file = "D:/phpcsv/b.csv";
$fp = fopen($file, "a");
$fileAttribute = "D:/phpcsv/a.txt";
$product_attrs = file_get_contents($fileAttribute);
$product_attrs = str_replace(PHP_EOL, ',', $product_attrs);
$arra_attrs = explode(',', $product_attrs);
$arra_attrs_cn = explode("\t", $product_attrs_cn);
foreach ($arra_attrs as $k => $v)
{
$v = str_replace(PHP_EOL, '', $v);
echo $v."<br/>";
$arra_attrs[$k]=iconv('UTF-8', 'GB18030', $v);
}
fputcsv($fp, $arra_attrs);
a.txt
宝贝名称 宝贝类目 店铺类目 新旧程度 省 城市 出售方式 宝贝价格 加价幅度 宝贝数量 有效期 运费承担 平邮 EMS 快递 发票 保修 放入仓库 橱窗推荐 开始时间 宝贝描述 宝贝属性 邮费模版ID 会员打折 修改时间 上传状态 图片状态 返点比例 新图片 视频 销售属性组合 用户输入ID串 用户输入名-值对 商家编码 销售属性别名 代充类型 数字ID 本地ID 宝贝分类 用户名称 宝贝状态 闪电发货 新品 食品专项 尺码库 采购地 库存类型 国家地区 库存计数 物流体积 物流重量 退换货承诺 定制工具 无线详情 商品条形码 sku 条形码 7天退货 宝贝卖点 属性值备注 自定义属性值 商品资质 增加商品资质 关联线下服务
b.csv
出现此问题的主要原因是因为windows下的UTF-8文件默认为带有BOM的,所以在读取的文件的到时候,是会吧BOM的开头隐藏的字符一起读取,在用iconv转码的时候遇到特殊字符的时候,iconv会出现bug,直接去掉。