1

我使用dirscanphp 函数获取文件名数组,它返回如下数组:

[8] => ?????? ?????.js
[9] => ???????? ?????  ??? ?????.js
[10] => ???????? ???????????? ????????.js
[11] => ?????????? ???.js
[12] => A Contra Corriente.js
[13] => ABC-CLIO Serials Web.js
[14] => ACL.js

前三个是其名称为西里尔字母的文件。我应该怎么做才能获得正确的文件名?

4

1 回答 1

4

我正在使用win7 ntfs

抱歉,在 Windows 下运行的 PHP 不支持包含通用 Unicode 字符的文件名。它只能处理完全由当前代码页中的字符组成的文件名。

该代码页对您来说可能是 1252(西欧,类似于 ISO-8859-1),它不包含西里尔字母。如果您在俄语安装上运行它,那么您的代码页将是 1251,并且西里尔字符可以工作 - 但带重音的拉丁文会中断。

这是一个影响所有使用来自 MS C 运行时的标准 C stdio 库调用的应用程序的问题,包括 PHP、Java 和其他应用程序。(某些语言,如 Python,对使用 Windows 特定 API 而不是 C 标准库的 Unicode 文件名有特殊支持;有请求 45517将相同的内容引入 PHP,但不要屏住呼吸。)

在非 Windows 平台上,Unicode 倾向于通过使用 UTF-8 编码的字节字符串来支持,因此所有 Unicode 字符都可以正常工作。不幸的是,Windows 没有这种能力(代码页 65001 是一种 UTF-8,但严重损坏)。

于 2012-06-20T16:44:48.550 回答