更新到php 5.3后,我们的一个系统开发了一个有趣的bug。它解析csv文件,第一步是向用户显示他们上传的内容,以便在确认之前进行检查。
但是我们遇到了一些上传某些文件但未读取的错误。奇怪的是,如果我们从这些文件中获取数据,将其复制并粘贴到记事本中并保存为.csv文件,它将上传得很好。
我的第一个想法可能与人们从特定程序创建csv文件有关吗?我注意到那个不起作用的那个(即使它包含相同的数据)比我们复制和粘贴的那个小一点。
非常感谢任何帮助。
答案 0 :(得分:7)
听起来像是有一个回车+ LineFeeds而另一个只有换行(或者是carraige返回?)
要么具有不同的编码:ASCII与UTF-16
答案 1 :(得分:1)
CSV文件的编码是否相同?
也许有些人一开始就有UTF-8 BOM,或者其他人有类似UTF-16的东西。
或者,行结尾字符可能存在差异 - evil 可以只使用LF,良好 CR + LF。
答案 2 :(得分:0)
如果文件看起来相同但尺寸不同,则可能是文件之间的换行符不同。
您可以使用记事本以外的某种形式的文本编辑器打开文件(例如Notepad++)以确认此
答案 3 :(得分:0)
检查文件编码。记事本默认情况下保存在ANSI字符集中。我注意到这一点,当Excel将解析一个CSV,ANSI中的字段,而不是另一个,UTF8。在UTF8文件中,它是一个字段,包括逗号。只有当我保存为ANSI时,Excel才会解析CSV。 PHP也可能发生类似的事情。
编辑:如果情况确实如此,您可以实施一个程序来“清理”传入的CSV文件。实际上,在PHP中就像你复制然后粘贴一样。如果您正在处理从客户端上传文件,那么很难坚持特定的编码,但是,您应该能够转换传入的数据。