У меня проблемы с созданием файлов и папок с использованием CakePHP 3 * Папка и файловые библиотеки (хотя это php's 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
В моей среде Ubuntu она работает нормально, однако на Windows Server 2012 R2 греческие части символов выглядят так, будто имеют проблемы с кодировкой, вот так (извиняюсь за плохое качество)
Я пробовал несколько вещей, и вот что я знаю до сих пор:
- Ubuntu 16.04 использует кодировку UTF-8 так же, как php, поэтому папка отлично выглядит на моем устройствеокружение.
- Windows использует UTF-16 (я уверен, я не уверен на 100%), к чему я должен конвертировать его, но когда я пытаюсь преобразовать путь к utf-16, я получаю следующееОшибка iconv или греческие символы появляются как вопросительные знаки, и php не может создать каталог:
недопустимая последовательность ввода в позиции
Вот основной код:
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));
'/ входящие / документы/someUser/εξερχομενο/Κ.900'
'�� / входящие / документы / someUser / ���������� / �.900 '
debug(iconv('UTF-8', 'GREEK', $path));
' Входящие / Documents / someUser / ��������� / �.900 '
debug(iconv('UTF-8', 'Windows-1252', $path));
[https://secure.php.net/function.iconv'>function.iconv]: Обнаружен недопустимый символ во входной строке
Когда я ввожу любой из преобразованных путей кодирования в $folder->create($path)
я все еще получаю фиктивные пути, если я вообще их получаю.
Как я могу создать правильные файлы и пути к файлам для Windows Server 2012 xampp?
ОБНОВЛЕНИЕ
После еще нескольких часов тестирования кажется, что на моем сервере Windows данные греческими символами, которые я отправляю через форму, не отображаются должным образом, поскольку Windows отображает их с помощью кодировки Windows-1251,В phpmyadmin все они отображаются правильно, но если я поставлю точку останова в середине моей системы, они появятся аналогично скриншоту, который я показал.Кроме того, набор символов моих заголовков ответа: Windows-1251
для Windows, utf-8
для Ubuntu.Поэтому я попытался преобразовать свои данные utf-8 в windows-1252, но все же мой греческий ввод превращается в вопросительные знаки.Все еще нет решения