作者CheLiu (刘彻)
看板PHP
标题[请益] 汇入CSV问题
时间Tue Apr 21 10:47:19 2015
这几天遇到了一个怪怪的问题
问题叙述如下
1、有两台机器 本机及正式系统机器
2、原本可以顺利上传汇入资料 不会乱码
印象中没有改到相关上传的code却突然变成
上传之後会乱码
3、之後本机再测试可以正常上传不会乱码後
就整个网页再覆盖到系统机器却依然乱码
怀疑是资料库有设定改变?但却又找不到
有跟本机比对过 都一样
不晓得还有可能是哪边有问题呢?谢谢
补充: 有把系统机器的资料库备份转移到本机
再次测试依然可以正确上传无乱码
所以有可能是机器本身哪边设定吗?
更新问题:
经过大家的提示或教导後有发现一个不同点
就是
1.在本机读取档案内容echo 出来是乱码,编码确定是UTF8
但是可以正确写入资料库
2.在SERVER端读取同一份档案echo出来
编码测试也确定是UTF8
但是ECHO出来 却会变成空白 或是不同字元 总之就是跟本机echo出来的
完全不一样,当然也还是无法些写入资料库
问题解决&结论
首先感谢rockmanalpha版友花时间协助及帮忙,不然我应该很难找出问题
这个问题经过一些测试rockmanalpha发现可能是
5.2好像有一个BUG 会将分隔後的资料中第一个高位字元拿掉
所以会造成中文有乱码,但却又不是每个系统都会发生
或是fgetcsv 有什麽隐藏参数 这部分小弟会找时间再测试看看
最後解决方式是在CSV档案里面的每个栏位都加上双引号
ex: "姓名","生日"
就这样我手上两个系统都没有做任何设定更动或程式码变动
问题就解决了
感谢rockmanalpha及众位板友,也回馈给大家这个问题 谢谢大家
※ 编辑: CheLiu (122.147.100.151), 04/21/2015 11:03:25
1F:推 hareion08: 在资料库连接加上"set names utf8" or 读取CSV字串加上 04/21 11:12
2F:→ hareion08: iconv()强制转换编码 or 你资料库编码不正确 04/21 11:12
3F:→ CheLiu: set names那个有加 而且有把原本不行的资料库备份到本机 04/21 11:30
4F:→ CheLiu: 进行测试 结果又是可以 04/21 11:31
5F:推 rockmanalpha: Live Server DB的Collation是不是utf8? 04/21 12:02
6F:推 rockmanalpha: 还有你的CSV档有没有BOM? 04/21 12:05
7F:推 rockmanalpha: 还有你可以试着在正式机器上将资料写入DB前 先输出 04/21 12:07
8F:→ rockmanalpha: 看看这时的UTF8是不是乱码 是乱码就排除掉DB出问题 04/21 12:08
9F:→ rockmanalpha: 的可能性 04/21 12:08
10F:→ CheLiu: 先输出就已经是乱码了 所以看起来不是资料库问题 04/21 12:25
11F:→ CheLiu: BOM的话应该也没问题 同一份档案本机可以 也有试过用记事 04/21 12:26
12F:→ CheLiu: 本去除BOM 结果也是一样 04/21 12:26
13F:推 rockmanalpha: 想确认下上传的档案编码是不是UTF8? 另外输出的PHP 04/21 13:42
14F:→ rockmanalpha: 页面也要加UTF8的header 开网页看是否还是乱码 04/21 13:43
15F:推 sunnyvisit: 可能本来utf8正常但其他编码就会有问题? 04/21 14:12
16F:→ CheLiu: 上传和输出的页面编码都是utf8 04/21 14:38
17F:推 rockmanalpha: 如果你本地跟正式Server一个是Windows一个是Linux 04/23 14:24
18F:→ rockmanalpha: 的话 我怀疑是语系问题 试试看在程式开头加上这句 04/23 14:25
19F:→ rockmanalpha: setlocale(LC_ALL,'zh_TW.UTF-8') 或者是zh_TW 04/23 14:26
20F:→ rockmanalpha: 总之是正式机器系统中的语系代号 测试看看 04/23 14:27
※ 编辑: CheLiu (122.147.100.151), 04/23/2015 15:36:51
※ 编辑: CheLiu (122.147.100.151), 04/23/2015 18:40:50
21F:推 rockmanalpha: 我想就是fgetcsv本身的问题了 网上也有人重写了这个 04/23 19:00
22F:→ rockmanalpha: function 不过最简单方法就是用5.2以上的PHP版本就 04/23 19:01
23F:→ rockmanalpha: 应该没这个问题了 04/23 19:01