PHP读取UTF-8 CSV

时间:2017-02-10 01:07:52

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

我有一个从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文件。所以我想一个按值或逐行操作的解决方案可能不够好?

1 个答案:

答案 0 :(得分: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);