(php) Проблема кодировки при экспорте в CSV-файл
5 сообщений
#14 лет назад
Доброго времени суток работаю над сайтом, на котором используется французский язык, тоесть присутствуют символы
é
è
à
ç
все хранится в кодировке UTF-8 как и сами файлы сайта так и кодировка для вывода на страници и данные в mysql базе.
на сайте все отображается правильно, включая вышеприведенные символы, а вот когда делаю экспорт базы данных с помощью php скрипта (пользователь нажимает кнопку экспорт), то французские символы отображаются неправильно.
например вместо
El Vice Presslé
при экспорте получаю
El Vice PresslГ©
может кто нибудь сталкивался с поодбной проблемой или может помочь с решением?
спасибо
прилагаю функцию , которая делает экспорт
function exportPeople(){
$config = loadConfiguration();
//читаем данные из базы
$res = mysql_query("SELECT * FROM person"

$ct = mysql_num_rows($res);
if ($ct <> 0 ) {
$dir = 'export_files/';
$file = 'export_people_' . date( "Y-m-d_H-i" ) . '.csv';
$fp = fopen($dir.$file, 'w'

//ниже идет формирование строки для записи в файл
$str = ' '.$config.';' ;
$str .= 'First name;';
$str .= 'Last name;';
$str .= $config.';' ;
$str .= 'City;';
$str .= 'Email;';
$str .= 'Phone direct;';
$str .= 'Phone mobile;';
$str .= 'Level;';
$str .= 'Role;';
$str .= $config.';';
$str .= $config.' code;';
$str .= $config.' email;';
//echo $str;
fputcsv($fp, split(';', $str), ';'

while ($p = mysql_fetch_array($res))
{
//$str = $p. ';'.
$str = $p.';'.
$p.';'.
$p.';'.
$p.';'.
$p.';'.
$p.';'.
strval($p).';' .
strval($p).';' .
$p.';'.
getLabelForUserRole($p).' ;'.
getManagerName($p).' ;';
$m = getPeopleById($p);
$str .= $m.';'.
$m.';';
fputcsv($fp, split(';', $str), ';'

}
}
fclose($fp);
return $file;
}
1 сообщение
#14 лет назад
Столкнулся с похожей проблемой, только у меня экспорт идет из ASP.NET. Такое впечатление, что Excel не распознает автоматически UTF8 кодировку. Перешел на однобайтовую (win-1252) кодировку - вроде нормально отображается.
5 сообщений
#14 лет назад
Проблему решил следующим образом.окаалось что действительно эксель не распознает кодировку.
при записи CSV файла в его начало необходимо добавить BOM последовательность, которая явно будет указывать на то, что файл в кодировке UTF8
в php это делается таким образом:
fwrite($fp,b"\xEF\xBB\xBF" ) ;
и дальше записывать в файл то что нужно