Где глюки? В UTF-8 или Excel?
Прошу помочь мне разобраться, где искать загвоздку.
Дело в том, что возникла у меня задачка - создать конструктор для sql - запросов на сайте с возможностью последующего сохранения в формат excel. Сохраняю в формат excel простым отправлением заголовков.
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/vnd ms-excel");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=query.xls");
Сначала все было нормально, пока запросы возвращали небольшое количество строк. Но потом, когда попробовал выбрать большой массив данных и сохранить их в excel - формате файл стал некорректно открываться. В экселе отборажалась полная абракадабра.
Стал рыться в иннете. Нашел инфу о том, что перед экспортом в excel данные лучше кодировать в UTF-8. Для этого нашел соответствующую функцию. Вроде бы она мне помогла. Но после экспериментов с запросами кодировка опять стала рушиться. Опять залез в иннет. Нашел более компактную функцию
Код:
iconv('CP1251','UTF-8',$s)
Она спасла на какое-то время, но потом зашел в тупик.
Кодировка рушится в Excele, если в ячейках присутствуют символы "+" или "-" (эти символы стопроцентно). При этом все отображается в чем-то непотребном.
Может быть кто-нибудь подскажет как с этим бороться. Если понадобится, я еще более детально все опишу. А забыл сказать, что у меня экспортируется таблица такого содержания:
Первый столбец название - пользователя и далее множество полей-статусов, где в ячейках находится лишь символы, соответсвующие "истине" или "лжи". У меня им соответсвовали знак "+" и "-". При этом выводя более 20 строк все рушилось. Тогда я заменил + и - на YES и NO. Тогда все встало на свои места. При этом ничего особого в 20 строке нет - в первом столбце название "Компания КомИнКом", а дальше у всех поля однообразны.
Подскажите, в чем может быть проблема и как все поправить.
Спасибо.