2017-02-10 16 views
2

У меня есть скрипт PHP, который читает из файла CSV, файл находится в формате 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) { 

[EDIT] Один из вопросов, с моим текущим кодом является то, что первое значение в первой строке всегда имеет три байта, которые идентифицируют 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