Я использую Windows 2003 для написания кода PHP. Я использую XAMPP Portable (копируем в D :). Проблема:
$path = 'D:\ebooks'; $all_file = scandir($path); foreach ($all_file as $file) { if (is_dir("$path/$file") && $file != '.' && $file != '..') { echo $file . "<br />\n"; } }
Когда я вызываю скрипт (с браузером), я не видел никаких каталогов (в D: \ ebooks), содержащих символ Юникода (я тестировал с вьетнамским, японским, китайским, чешским).
Но если я удалю is_dir("$path/$file")
, каталоги отображаются со многими странными символами и многими ???
персонажи.
Как я могу решить проблему?
К сожалению, существует множество ошибок, связанных с доступом PHP к файловой системе Windows. Хотя Windows хранит имена файлов как UTF-16, внутренние элементы PHP используют гораздо более старые ANSI-файлы api. Так что лучше всего делать вещи с именами файлов, которые находятся в диапазоне ascii, или переключиться на другую операционную систему.
Это может помочь чешскому, это не поможет с CJK (все еще это ищет). Багги «Обоснование»: UTF-8 в порядке, если он доступен для набора символов Windows.
PHP неприятно ясен по этому поводу:
scandir () и readdir () не поддерживают имена файлов Unicode
http://bugs.php.net/bug.php?id=34574
«PHP не поддерживает операции unicode до PHP6».
написанной в сентябре 2005 года.
Вы также можете попытаться получить эквивалентное эквивалентное имя dos , используя систему ('dir / X'), проанализировать результаты для коротких и длинных имен и работать оттуда. Отображать длинные имена, фактически получая доступ (для статистики, временной метки и открытого файла, конечно) с короткими именами …