PHP的Unicode问题

时间:2012-06-20 11:55:53

标签: php file unicode

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

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

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

1 个答案:

答案 0 :(得分:4)

  

我正在使用win7 ntfs

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

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

这是一个影响所有使用MS C运行时标准C stdio库调用的应用程序的问题,包括PHP,Java等。 (有些语言,比如Python,特别支持使用特定于Windows的API代替C stdlib的Unicode文件名; Request 45517可以使用{{3}}来获取相同的PHP,但不要屏住呼吸。)

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