我需要使用PHP在文件系统中保存带有非拉丁文件名的文件。
我想让这项工作跨平台。我怎么知道我可以使用什么编码来编写文件?我知道许多现代文件系统都是基于UTF-8的(这是正确的吗?),但我怀疑Windows XP是(例如)。
那么,是否存在强大的检测机制?
答案 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
与非拉丁语路径一起正常工作。