Вопрос по unicode, directory, windows, php – Список каталогов, содержащих символы Unicode в Windows

4

Я использую Windows 2003 для написания кода PHP. Я использую XAMPP Portable (скопируйте в D :). Эта проблема:

<code>$path = 'D:\ebooks';
$all_file = scandir($path);
foreach ($all_file as $file) {
  if (is_dir("$path/$file") && $file != '.' && $file != '..') {
    echo $file . "<br />\n";
  }
}
</code>

Когда я вызываю скрипт (с помощью браузера), я не вижу никаких каталогов (в D: \ ebooks), содержащих символ Unicode (я тестировал на вьетнамском, японском, китайском, чешском).

Но если я уберуis_dir("$path/$file"), каталоги отображаются со многими странными персонажами и многими??? персонажи.

Как я могу решить проблему?

«Много странных персонажей» часть, возможно, связана с вашей кодировкой вывода браузера. cmbuckley
Что вы подразумеваете под «именем юникода»? ? Вы имеете в виду специальные символы, такие как & # xD4; или & # xFC; ? Abhay Chaware

Ваш Ответ

2   ответа
6

есть много ошибок, связанных с доступом PHP к файловой системе Windows. В то время как Windows хранит имена файлов как UTF-16, внутренние компоненты PHP используют более старые API-интерфейсы ANSI. Так что лучше всего делать вещи с именами файлов, которые находятся в диапазоне ASCII, или переключаться на другую операционную систему.

@cbuckley: Обычно я отговариваю людей говорить это, но в данном случае это просто факт, что PHP на Windows имеет действительно дерьмовую поддержку файловой системы.
У меня есть эта проблема в Linux PHP 7.1. пожалуйста, проверьте ссылку:bugs.php.net/bug.php?id=74958
+1 для «переключения на другую операционную систему»; :-)
0

это не поможет с CJK (все еще ищу это сам). Ошибка "Обоснование": UTF-8 в порядке, если он сопоставим с набором символов Windows.

PHP неприятно ясно об этом:

scandir() and readdir() do not support Unicode filenames

http://bugs.php.net/bug.php?id=34574

«PHP does not support unicode operations until PHP6.»

написано в сентябре 2005 г.

Вы также можете попытаться захватитьдос короткое имя эквивалент используя систему («dir / X»), анализируйте результаты для коротких и длинных имен и работайте оттуда. Отображение длинных имен, на самом деле доступ (для статистики, отметки времени и открытия файла, конечно) с короткими именами ...

Похожие вопросы