|
首先需求是:从一个文本中读取相关内容(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,直接去掉。 |
|
|