`

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

    博客分类:
  • PHP
 
阅读更多

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

分享到:
评论

相关推荐

    PHP读取文件,解决中文乱码UTF-8的方法分析

    当读取的文件是UTF-8编码且无BOM(Byte Order Mark)时,通常可以直接读取而不会出现乱码。但在某些情况下,如文件编码为GBK或其他非UTF-8格式时,需要进行编码转换。 在描述中提到了一个方法,通过创建流上下文(`...

    去除所有页面BOM头

    在IT行业中,BOM(Byte Order Mark)是一个特殊字符,主要用于标识文本文件的编码格式,尤其是在UTF-8编码中常见。BOM头并不是必须的,但在某些情况下可能会引起问题,例如在JavaScript处理JSON数据或者在网页显示...

    什么是BOM头,如何去掉BOM头.zip

    在UTF-8编码中,BOM头由三个字节组成(0xEF, 0xBB, 0xBF),它并不是必须的,但有时候会被添加到文件的开头来表明该文件是采用UTF-8编码。尽管BOM头对于某些程序来说是有用的,但它可能会引起一些问题,尤其是在处理...

    php中文乱码怎么办如何让浏览器自动识别utf-8

    PHP的`file_get_contents()`和`file_put_contents()`函数默认不考虑编码,因此在读取非UTF-8编码的文件时,需要使用`iconv`或`mb_convert_encoding`进行转换。 5. **Smarty模板引擎**: 如果使用Smarty模板引擎,...

    PHP输出中文乱码问题.docx

    注意,utf-8文件可能包含BOM(字节顺序标记),这在使用session时可能导致问题。使用编辑器如EditPlus,可以去掉BOM,避免影响。 其次,PHP与MySQL的数据交互时,两者编码需保持一致。在MySQL配置文件(如my.ini或...

    linux 查看文件编码

    通常,PHP文件使用UTF-8无BOM编码,这是最兼容和推荐的标准。 除了命令行工具,还有一些图形界面工具,如Notepad++(在Linux下可通过Wine运行)和Geany,它们都提供了查看和更改文件编码的功能。在日常工作中,选择...

    完美解决PHP中文乱码

    `UTF-8`文件可能会包含BOM(Byte Order Mark),这可能在使用`session`时引发问题。使用编辑器如EditPlus,可以在保存时选择“总是删除UTF-8签名”,以去除BOM。 2. **PHP与MySQL数据交互**: - **数据库编码**:...

    检查php文件中是否含有bom的函数

    常见的UTF-8编码的文件可能会在开头包含0xEF,0xBB,0xBF这三个字节,这就是UTF-8编码文件的BOM。 2. PHP文件中BOM的影响:在PHP文件中,如果存在BOM,特别是当服务器不正确处理BOM时,可能会导致语法解析错误,出现...

    php Ajax乱码

    2. **转换编码**:如果服务器端的数据源(如数据库、文本文件)采用的是非UTF-8编码,如GBK,我们需要在读取数据后将其转换为UTF-8。PHP中的`iconv()`函数用于不同字符集间的转换。例如: ```php $test = "我是...

    小结下MySQL中文乱码,phpmyadmin乱码,php乱码 产生原因及其解决方法第1/3页

    3. **文件编码问题**:如果你的PHP代码文件不是以UTF-8无BOM格式保存,或者文件中包含其他编码的文本,可能会在读取或写入数据库时引发乱码。 4. **HTTP头设置错误**:在Web开发中,服务器发送的HTTP头信息中的字符...

Global site tag (gtag.js) - Google Analytics