0

我正在尝试上传一个以阿拉伯语命名的文件,在正确上传保存在数据库中并使用其阿拉伯名称的文件后,但在目标文件夹中,该文件未使用正确的名称保存......所以这里有什么问题?

4

1 回答 1

1

是的,它的窗户

PHP 和其他使用 MS C 运行时实现的 stdio 文件处理的应用程序无法处理带有机器默认代码页之外字符的 Windows 文件名。如果服务器设置为阿拉伯语,您可以上传阿拉伯语(但您不能上传中文或拉丁口音)。从理论上讲,您可以将进程的代码页设置为 UTF-8 (65001),但是 C 运行时中存在严重的错误,这使得它变得不可靠、不可用。

如果您想要 Unicode 文件名支持,您必须W直接调用 Win32 API,而不是依赖标准文件 IO,除非该语言具有内置支持(.NET 语言和 Python 支持;PHP 没有)。

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

于 2013-10-15T12:38:38.083 回答