В CSV-файлах можно использовать символы Юникода, просто убедитесь, что вы используете правильные HTTP-заголовки. Это прекрасно работает в OpenOffice, но, если я правильно помню, в Excel возникают проблемы с отображением CSV-файлов с символами Юникода.
Кроме того, вы должны попытаться использовать fputcsv , это упрощает работу. Когда вы создаете файлы на лету, вы можете использовать php output stream .
Так что-то вроде этого:
$handle = fopen("php://output", "w");
header("Content-Type: text/csv; charset=UTF-8");
fputcsv($handle, $fields, ';', '"');
fclose($handle);
EDIT
После прочтения ваших комментариев кажется, что у вас есть проблемы с конвертированием htmlentities, как é
. Чтобы преобразовать эти объекты, вы должны убедиться, что каждое поле декодировано. Вы можете сделать это с html_entity_decode следующим образом:
$decoded_string = html_entity_decode($string, ENT_QUOTES, 'UTF-8');
Кстати, в большинстве случаев не очень хорошая идея хранить текст с htmlentities в базе данных, потому что, когда вы не хотите выводить html (как в этом случае), вы должны преобразовать их обратно в реальные символы. Проще просто сохранить текст в формате Unicode.