我需要使用 PHP 在文件系统上保存非拉丁文件名的文件。
我想让这项工作跨平台。我怎么知道我可以使用什么编码来写入文件?我知道许多现代文件系统都是基于 UTF-8 的(这是正确的吗?),但我怀疑 Windows XP 是(例如)。
那么,是否有一个健壮的检测机制?
最佳答案
这不是您问题的答案,但如果您不需要在文件系统级别执行大量操作(如搜索、排序...),则有一个很好的跨平台解决方法来解决 this SO question 中概述的问题。 : URLEncode()
文件名。
Hörensägen.txt
变成了
H%c3%b6rens%c3%a4gen.txt
它应该可以在任何文件系统中安全使用,并且能够映射任何 UTF-8 字符。
我发现这比尝试“本地”处理主机操作系统的功能更可取,这肯定会很复杂且容易出错(除了操作系统差异之外,我确信各种文件系统格式 - FAT16, FAT32、NTFS、extFS 版本 1/2/3.... 有自己的一套规则需要注意。)
关于PHP 检测文件系统编码/保存非拉丁文文件名的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2522722/