PHP使用非拉丁文件名检测文件系统编码/保存文件

时间:2010-03-26 11:07:36

标签: php unicode filesystems

我需要使用PHP在文件系统中保存带有非拉丁文件名的文件。

我想让这项工作跨平台。我怎么知道我可以使用什么编码来编写文件?我知道许多现代文件系统都是基于UTF-8的(这是正确的吗?),但我怀疑Windows XP是(例如)。

那么,是否存在强大的检测机制?

2 个答案:

答案 0 :(得分:6)

不是您的问题的答案,但如果您不需要在文件系统级别(如搜索,排序......)上进行大量操作,那么{{3}中概述的问题就有一个很好的跨平台解决方法}:URLEncode()文件名。

Hörensägen.txt 

变成了

H%c3%b6rens%c3%a4gen.txt

应该可以安全地在任何文件系统中使用,并且能够映射任何UTF-8字符。

我发现这比尝试“本地”处理主机操作系统的功能要好得多,这确保复杂且容易出错(除了操作系统差异,我确定各种文件系统格式 - FAT16, FAT32,NTFS,extFS版本1/2/3 ....带来他们自己的一套规则要注意。)

答案 1 :(得分:0)

PHP 7.1在Windows上支持UTF-8文件名(在我更新PHP和Apache之前,我在提供带有西里尔文字的文件时遇到了问题),所以如果你可以只更新PHP ,这是目前最强大和跨平台的解决方案。

我甚至不需要ini_set('mbstring.internal_encoding','UTF-8');file_get_contents与非拉丁语路径一起正常工作。