只是urlenpre
所需的字符串作为文件名。 从中返回的 所有
字符
urlenpre在文件名(NTFS / HFS /
UNIX)中均有效,然后您可以
urldepre将文件名改回UTF-8(或它们使用的任何编码)。
注意事项(同样适用于以下解决方案):
- 进行网址编码后,文件名必须少于255个字符(可能是字节)。
- UTF-8具有许多字符的多种表示形式(使用组合字符)。如果您不对UTF-8进行标准化,则可能无法搜索
glob
或重新打开单个文件。 - 您不能依赖
scandir
或类似功能进行alpha排序。urldepre
然后,您必须使用文件名,然后使用了解UTF-8(和归类)的排序算法。
更糟糕的解决方案
以下是不太吸引人的解决方案,更复杂,并且有更多警告。
在Windows上,PHP文件系统包装程序期望并返回ISO-8859-1字符串作为文件/目录名称。这给您两个选择:
在文件名中自由使用UTF-8,但要了解,非ASCII字符在PHP外部将 显示为错误 。非ASCII UTF-8字符将存储为多个 单个 ISO-8859-1字符。例如,
ó
将出现ó
在Windows资源管理器中。将文件/目录名称限制为ISO-8859-1中可以表示的字符。实际上,您将
utf8_depre
]在文件系统功能中使用UTF-8字符串之前先传递它们,然后传递条目scandir
使您utf8_enpre
获得UTF-8中的原始文件名。
注意事项!
- 如果传递给文件系统功能的任何 字节 与ISO-8859-1 中的无效Windows文件系统字符相匹配,则表示您不走运。
- Windows 可能 在非英语语言环境中使用ISO-8859-1以外的编码。我想它通常是ISO-8859-#之一,但这意味着您需要使用
mb_convert_encoding
而不是utf8_depre
。



