2017-02-10 62 views
2

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

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

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

+0

推荐阅读:http://stackoverflow.com/questions/279170/utf-8-all-the-way-through – wogsland

回答

0

使用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); 
+0

$的数据是在我的代码的数组,有没有上应用此办法流在使用它之前在fgetcsv? – Bishoy

+0

对不起,我写了错误的变量,我改变了功能。 –

+0

仍然没有工作:)错误是说第一个参数应该是一个字符串 – Bishoy