首先需求是:从一个文本中读取相关内容(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,直接去掉。
相关推荐
当读取的文件是UTF-8编码且无BOM(Byte Order Mark)时,通常可以直接读取而不会出现乱码。但在某些情况下,如文件编码为GBK或其他非UTF-8格式时,需要进行编码转换。 在描述中提到了一个方法,通过创建流上下文(`...
在IT行业中,BOM(Byte Order Mark)是一个特殊字符,主要用于标识文本文件的编码格式,尤其是在UTF-8编码中常见。BOM头并不是必须的,但在某些情况下可能会引起问题,例如在JavaScript处理JSON数据或者在网页显示...
在UTF-8编码中,BOM头由三个字节组成(0xEF, 0xBB, 0xBF),它并不是必须的,但有时候会被添加到文件的开头来表明该文件是采用UTF-8编码。尽管BOM头对于某些程序来说是有用的,但它可能会引起一些问题,尤其是在处理...
PHP的`file_get_contents()`和`file_put_contents()`函数默认不考虑编码,因此在读取非UTF-8编码的文件时,需要使用`iconv`或`mb_convert_encoding`进行转换。 5. **Smarty模板引擎**: 如果使用Smarty模板引擎,...
注意,utf-8文件可能包含BOM(字节顺序标记),这在使用session时可能导致问题。使用编辑器如EditPlus,可以去掉BOM,避免影响。 其次,PHP与MySQL的数据交互时,两者编码需保持一致。在MySQL配置文件(如my.ini或...
通常,PHP文件使用UTF-8无BOM编码,这是最兼容和推荐的标准。 除了命令行工具,还有一些图形界面工具,如Notepad++(在Linux下可通过Wine运行)和Geany,它们都提供了查看和更改文件编码的功能。在日常工作中,选择...
`UTF-8`文件可能会包含BOM(Byte Order Mark),这可能在使用`session`时引发问题。使用编辑器如EditPlus,可以在保存时选择“总是删除UTF-8签名”,以去除BOM。 2. **PHP与MySQL数据交互**: - **数据库编码**:...
常见的UTF-8编码的文件可能会在开头包含0xEF,0xBB,0xBF这三个字节,这就是UTF-8编码文件的BOM。 2. PHP文件中BOM的影响:在PHP文件中,如果存在BOM,特别是当服务器不正确处理BOM时,可能会导致语法解析错误,出现...
2. **转换编码**:如果服务器端的数据源(如数据库、文本文件)采用的是非UTF-8编码,如GBK,我们需要在读取数据后将其转换为UTF-8。PHP中的`iconv()`函数用于不同字符集间的转换。例如: ```php $test = "我是...
3. **文件编码问题**:如果你的PHP代码文件不是以UTF-8无BOM格式保存,或者文件中包含其他编码的文本,可能会在读取或写入数据库时引发乱码。 4. **HTTP头设置错误**:在Web开发中,服务器发送的HTTP头信息中的字符...