Невозможно создать каталог в Windows, используя PHP и UTF-8

Я пытаюсь создать несколько каталогов с именами Unicode в Windows. Имена правильно отображаются в браузере, но при создании каталога он преобразуется в текст мусора.

Я попытался перекодировать преобразования, удалив специальные символы.

$myfile = fopen("unicode.csv", "r") or die("Unable to open file!"); $lines = file("unicode.csv", FILE_IGNORE_NEW_LINES); echo '<table border="1">'; foreach($lines as $k=>$v){ $parts = preg_split('/[	]/', $v); echo '<tr>'; foreach($parts as $key=>$val){ if($key==0){ $dir = str_replace("/", "", $val); $dir = str_replace("\", "", $dir); $encode = mb_detect_encoding($dir, mb_detect_order(), false); $dir = mb_convert_encoding($dir , 'UTF-8' , 'UTF-8'); echo '<td>'.$dir.'</td><td>'.$encode.'</td>'; $result = mkdir ($dir, "0777"); } echo '<td>'.$val.'</td>'; } echo '</tr>'; } 

Ожидаемый результат - имя каталога должно быть читаемым в UTF-8. Ожидаемые результаты (HTML-вывод скрипта

Оказывается в мусорном тексте. Gargabe имена каталогов

Всего 1 ответ


Благодаря @eryksun:

Исходя из ваших результатов, похоже, что PHP mkdir не транскодирует из UTF-8 в собственную Windows UTF-16LE, чтобы вызвать [W] ide-символ CreateDirectoryW. Это, вероятно, просто вызывает C MKDIR. Это наивно передает байты в CreateDirectoryA, который декодирует имя UTF-8 с использованием системной [A] кодировки NSI (например, кодовой страницы 1252). Начиная с Windows 10, мы можем установить [A] NSI в UTF-8 в конфигурации локали системы. Это изменение требует перезагрузки.


Есть идеи?

10000