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

Я пытаюсь создать несколько каталогов с именами 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('/[\t]/', $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. Expected Results (HTML Output of the Script

Оказывается, в тексте мусора. Gargabe Directory Names

1 Ответ

0 голосов
/ 14 мая 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...