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