我使用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"; } }
当我用浏览器调用脚本时,我看不到包含Unicode字符(我用越南语,日语,中文,捷克语testing)的任何目录(在D:\ ebooks内)。
但是,如果我删除is_dir("$path/$file")
,目录显示许多奇怪的字符和许多???
字符。
我该如何解决这个问题?
不幸的是,PHP访问windows文件系统有很多bug。 虽然Windows确实将文件名存储为UTF-16,但是PHP的内部使用了更老的ANSI api。 所以最好只做一些文件名在ascii范围内的东西,或者切换到不同的操作系统。
这可能对捷克有帮助,这对中日韩没有帮助(我自己也在寻找)。 Buggy“理由”:UTF-8是可以的,只要它可以映射到Windows字符集。
PHP很不清楚这个:
scandir()和readdir()不支持Unicode文件名
http://bugs.php.net/bug.php?id=34574
«PHP直到PHP6才支持unicode操作。»
写于2005年9月。
您也可以尝试使用system('dir / X')获取等效的短名称 ,解析短名和长名的结果并从那里开始工作。 显示长名称,实际上访问(用于统计,时间戳和文件打开当然)与短名称…