PHP iconv读取UTF-8有BOM文件出现解析异常

在Windows环境下,从UTF-8带BOM的文本文件(a.txt)读取内容并利用分隔符转换为数组,再处理后写入到同样为UTF-8带BOM的CSV(b.csv)时,使用iconv函数转码出现异常,导致写入文件时第一个属性值丢失。问题源于iconv在遇到BOM特殊字符时的处理bug。
摘要由CSDN通过智能技术生成

首先需求是:从一个文本中读取相关内容(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."
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值