【问题标题】:Re-encode an entire CSV file before parsing - using simple PHP?在解析之前重新编码整个 CSV 文件 - 使用简单的 PHP?
【发布时间】:2011-04-07 13:27:52
【问题描述】:

我有一个脚本,它读取远程 CSV 文件的内容,遍历行,并将数据项添加到数据库中。该文件平均有大约 3000 行,因此有 3000 个产品。

澄清几点:

  • 我无法事先控制 CSV 文件中的数据
  • 我无权访问/控制创建此 CSV 文件的方式
  • CSV 文件每天根据 MySQL 数据库中的数据动态生成一次

问题:

我的脚本只迭代了大约 1300 行然后停止,没有错误,什么都没有。所有文本都用双引号括起来,并且通常 CSV 文件格式正确。奇怪的是:如果我下载 CSV 文件,在记事本 ++ 中打开它并将编码更改为 UTF-8 没有 BOM,将其上传到测试服务器并在该文件上运行我的脚本,我得到了 FULL 3000 个项目和所有没问题。

那么,我假设生成此文件的人需要将数据插入为 UTF-8?因为我无法控制该过程,所以我想知道是否有一种相当简单的方式可以将没有 BOM 编码的 UTF-8 应用于该文件,或者至少将文件内容读入一个变量并重新编码?

非常感谢

【问题讨论】:

  • 我会首先排除超时问题,然后检查您的一般方法 - 您有任何代码要分享吗?
  • @tickwallet 我确实 - pastebin.com/fLngbWYu
  • @tickwallet - 没有超时问题,已将最大执行时间设置为 60 分钟,并且可以完全控制服务器,所以我确定问题出在数据本身

标签: php encoding csv character-encoding fgetcsv


【解决方案1】:

在处理文件之前,您可以使用iconv 直接从 php 更改编码。

编辑: php 版本的 iconv 可用于处理数据。如果您想在导入文件之前重新编码文件,您必须使用 linux 命令iconv(假设是 LAMP 服务器),例如使用exec

【讨论】:

  • 但这会应用于实际的FILE还是文件中的数据?
  • 这很好,但是如果您不知道源字符集怎么办?
  • @webfac 我假设源字符集总是相同的,所以你只需要你已经拥有的一个样本。
【解决方案2】:

听起来您正试图直接从另一台服务器执行此操作。为什么不获取整个文件并将其保存到您自己的服务器,对其进行任何操作然后进行处理?

【讨论】:

  • 嗯,从来没有想过!我可以这样做,我是否只需将所有内容读入一个变量,重新编码该变量的内容并写入新文件?
  • 正是这样,然后您可以在闲暇时阅读/处理文件,而不必担心互联网连接关闭等。
猜你喜欢
  • 1970-01-01
  • 2015-07-28
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
相关资源
最近更新 更多