Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

Как сохранить excel документ с русским названием phpexcel?

Привет всем! Использую PHP, PHPExcel.
Пишу скрипт, который берёт название таблицы из базы данных и сохраняет excel документ с его именем. Название таблицы на русском.
$objWriter->save('teachears/РусскиеБУКВЫ.xlsx');//вместо РусскиеБуквы - переменная хранящая название таблицы.
На выходе - файл имеет в названии непонятные иероглифы.
Возможно ли сохранить файл с русским названием? Или придётся писать костыль для перевода на английский?

Добавлено:
$connection = new mysqli("localhost", "admin", "1234", "teachers"); $connection->set_charset("utf8"); $query1 = "SHOW TABLES FROM `teachers`"; $result = mysqli_query($connection, $query1);
while ($row1 = mysqli_fetch_array($result, MYSQL_NUM)) { $objPHPExcel->getActiveSheet()->setTitle('Демо'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B1', 'Мир!'); ...Код наполнения файла данными... $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('teachears/'.$row1[0].'.xlsx');//где $row1[0] - название таблицы }
Собственно, содержимое файла в порядке, проблема только в названии.


Ответ

Резюмирую комментарии:
При создании файлов в php следует учитывать кодировку имени файла, поддерживаемую файловой системой и функциями операционной системы.
Например, для Windows (по признакам видно что именно в этой среде запускается скрипт топикстартером) php-скрипт должен использовать кодировку cp1251, поскольку файлы в php создаются API функцией CreateFileA (по крайней мере именно она есть в списке импорта php5ts.dll).
Задачу, указанную в вопросе, решает строка $sysFilename = iconv('UTF-8', 'CP1251//IGNORE', $dbFilename); (как верно подсказал artoodetoo).
Дополнительно может понадобиться фильтрация имен файлов на предмет содержания в них запрещенных символов (для Windows это <>:"/\|?* и "нулевой" символ), а также обрезка до разрешенной длины (для Windows - 255 символов) см. Naming Conventions
PS. На всякий случай проверил. В Windows нужно проверять длину пути. Из php файл не создается если длина пути больше 255 (что странно, в документации написано про 260 символов)

Комментариев нет:

Отправить комментарий