【问题标题】:PHP read UTF-8 CSVPHP 读取 UTF-8 CSV
【发布时间】:2017-06-28 05:44:13
【问题描述】:

我有一个从 CSV 文件读取的 PHP 脚本,该文件为 UTF-8 格式,下面的代码将其视为 ASCII。如何更改代码以将文件读取为 UTF-8?

if (($handle = fopen("books.csv", "r")) === FALSE)
  throw new Exception("Couldn't open books.csv");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

[编辑] 我当前代码的一个问题是第一行的第一个值总是在开头附加三个字节来标识 UTF-8 文件。所以我猜一个按值或逐行操作的解决方案可能不够好?

【问题讨论】:

标签: php csv utf-8 drupal-8 drush


【解决方案1】:

使用 fgets() 获取变量 $date 中的文件所有字符串,然后 mb_convert_encoding() 转换编码,然后 str_getcsv() 将字符串转换为数组。

if (($handle = fopen("books.csv", "r")) === FALSE)
    throw new Exception("Couldn't open books.csv");

$data = "";

// get file all strin in data
while (!feof($handle)) {
    $data .= fgets($handle, 5000);
}

// convert encoding
$data = mb_convert_encoding($data, "UTF-8", "auto");

// str_getcsv
$array = str_getcsv($data);

【讨论】:

  • $data 是我的代码中的一个数组,有没有办法在 fgetcsv 中使用它之前将它应用到流上?
  • 对不起,我写错了变量,我改了函数。
  • 仍然不工作 :) 错误是说第一个参数应该是一个字符串
  • 感谢 Jin 的帮助,但这并没有删除第一行第一项中出现的三个错位字符
  • 如何使用 fgets() 获取文件变量 $date 中的所有字符串,然后 mb_convert_encoding() 转换编码,然后 str_getcsv() 将字符串转换为数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 2011-05-19
  • 1970-01-01
相关资源
最近更新 更多