У меня возникают проблемы с созданием файлов и папок с использованием Папки и библиотеки файлов из cakephp 3 (хотя это php mkdir в задней части этого).
Версия PHP 7.0.28
Шаги:
documents. DS . $user->username . DS . $file->protocol . $file->file_type . DS . $file->name
Пример пути будет выглядеть так/documents/user/Κ.300/Κ.310_6_4092.pdf

Я пробовал много вещей, и вот что я знаю на данный момент:
illegal input sequence at position
Вот это базовый код:
public function setPath(array $data)
{
Configure::load('file_directories', 'default');
$path = $this->createPathFromData($data);
$folder = new Folder('/');
$folder->create($path);
$this->directory = new Folder($path);
if (!$this->validateDirectory()) {
throw new Exception('Something went wrong when creating directories');
}
}
Вот некоторые результаты отладки:
debug(mb_detect_encoding($path));
UTF-8
debug($path);
debug(iconv('UTF-8', 'UTF-16', $path));
'/inbox/documents/someUser/εξερχομενο/Κ.900'
'��/inbox/documents/someUser/����������/�.900'
debug(iconv('UTF-8', 'GREEK', $path));
'inbox/documents/someUser/���������/�.900'
debug(iconv('UTF-8', 'Windows-1252', $path));
[https://secure.php.net/function.iconv'>function.iconv]: Detected an illegal character in input string
Когда я ввожу любой из преобразованных путей кодирования в $folder->create($path), я все равно получаю поддельные пути, если они вообще есть.
Как я могу создать правильные файлы и пути к файлам для Windows Server 2012 xampp?
ОБНОВИТЬ
После еще нескольких часов тестирования выяснилось, что на моем сервере Windows данные в греческих символах, которые я отправляю через форму, не отображаются должным образом, поскольку Windows отображает их в кодировке Windows-1251.
В phpmyadmin все они отображаются правильно, но если я поставлю точку останова в середине работающей системы, они будут выглядеть так же, как на скриншоте, который я показал. Кроме того, набор символов моих заголовков ответов - Windows-1251 для Windows, utf-8 для ubuntu. Итак, я попытался преобразовать свои данные utf-8 в windows-1252, но все же мой ввод на греческом языке превратился в вопросительные знаки. Все еще нет решения






Для тех, кто страдает от той же проблемы, что и я, в основном греческих разработчиков, вот ответ на создание папок и файлов с греческими именами из пользовательского ввода:
Когда вы получаете ввод через форму (при условии, что кодировка ввода - UTF-8), преобразуйте ее в ISO-8859-1 или Windows-1253. Если вы конвертируете его в Windows-1253, вы можете использовать только php-функцию iconv. Для ISO-8859-1 вы можете использовать mb_convert_econding. Вот так:
$input = iconv('UTF-8', 'Windows-1253', $input)
ИЛИ ЖЕ
$input = mb_convert_encoding($input, 'ISO-8859-1')
Теперь вы готовы создать свою папку на греческом языке. Имейте в виду, что Windows-1252 или Windows-1251 НЕ поддерживают греческие символы, а Windows-1253 отображает их правильно, только если вы также измените языковой стандарт системы на греческий.
Вы еще не закончили! В зависимости от кодировки вашей базы данных (в моем случае это была UTF-8) вы ИМЕЮТ конвертируете строку обратно в UTF-8, если вы планируете ее сохранить. Или вы можете сделать копию в самом начале. В любом случае не храните преобразованный ввод в своей базе данных, иначе вы получите кучу сохраненной тарабарщины.
Надеюсь, это избавит кого-то от неприятностей, через которые мне пришлось пройти!