2013-10-14 43 views
0

我试图上传一个以阿拉伯语命名的文件,在上传保存在数据库中的文件后,它的阿拉伯文名称正确,但在目标文件夹中文件没有用正确的名字保存...所以这里有什么问题?在yii上传阿拉伯文命名文件...编码问题

+1

什么平台?如果Windows放弃。另外,您通常应避免将用户输入用作创建文件系统名称的基础。 – bobince

+0

是它的窗户。 – Mohammad

回答

1

是其Windows

PHP,以及使用MS C运行时的执行标准输入输出文件处理,不能与机器的默认代码页之外的字符处理Windows的文件名的其他应用程序。如果服务器设置为阿拉伯语,则可以上传阿拉伯语(但不能上传中文或拉丁语口音)。从理论上说,你可以将进程的代码页设置为UTF-8(65001),但是C运行时存在严重的错误,使得这个错误不可靠。

如果您需要Unicode文件名支持,您将不得不直接调用Win32 W API,而不是依赖标准文件IO,除非语言内置了对它的支持(.NET语言和Python做; PHP不)。

允许用户指定用于服务器端文件系统存储的文件名是危险的,而且很难正确使用,特别是在Windows下。使用代理文件名通常会更好,例如123.dat,其中123可能是数据库行ID。这也会导致Unicode问题消失。 (如果你想直接为它们提供服务,你可以使用重写来使它们看起来有更友好的外部名称,通过IRI编码,URL可以很容易地在路径中包含Unicode字符。)