Intereting Posts
Обновление PHP с версии 5.2 до 5.3 Как получить недельные дни в php? Автоматическое определение текущего локального времени пользователя с помощью JavaScript или PHP Когда я использую статические переменные / функции в php? Как создавать и устанавливать значения для атрибута в XML? Рекомендации по проверке защищенных методов с помощью PHPUnit (на абстрактных классах) слияние двух массивов и сохранение повторяющихся значений Два разных языка PHP и Java в одном приложении с PHP на Apache и Java на Tomcat Проблемы с загрузкой нескольких файлов в Symfony2 Как отправить данные с помощью jQuery Правила перезаписи правил CodeIgniter и контроллер Неустранимая ошибка: максимальное время выполнения 30 секунд превышено, когда я выполняю ежедневный запуск с моего сайта Предупреждение: mysqli_stmt :: bind_param (): Число элементов в строке определения типа не совпадает с числом переменных связывания 11 PHP-сессии в базе данных Как получить ответ на несколько пунктов цены на рынке

Список каталогов, содержащих символы Unicode в Windows

Я использую 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'), проанализировать результаты для коротких и длинных имен и работать оттуда. Отображать длинные имена, фактически получая доступ (для статистики, временной метки и открытого файла, конечно) с короткими именами …