PHP读取UTF-8格式的CSV文件

5

我有一个PHP脚本,可以从一个UTF-8格式的CSV文件中读取数据,但是下面的代码将其作为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文件的三个字节。因此,我猜按值或按行操作的解决方案可能不够好?


建议阅读:https://dev59.com/13VC5IYBdhLWcg3wfhGL - wogsland
1个回答

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? - Bishoy
抱歉,我写错了变量,然后改了函数。 - Jin.C
仍然无法工作 :) 错误提示是第一个参数应该是字符串。 - Bishoy
谢谢Jin的帮助,但是这个方法没有移除首行第一项中出现的三个乱码字符。 - Bishoy
那么,使用fgets()将文件中的所有字符串获取到变量$date中,然后使用mb_convert_encoding()转换编码,最后使用str_getcsv()将字符串转换为数组,这样怎么样? - Jin.C
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接