PHP 使用特殊字符的目录的 glob 函数

PHP glob function with directories using special characters

拥有名为“Łęć”的目录 并像这样使用 glob:

$dirs = glob( FILES . '/general/*' );

给我的结果是:

...
(string) "../pliki/general/Logo"
(string) "../pliki/general/���"
(string) "../pliki/general/Maski"
...

而这个���就是名为Łęć

的目录

我完全不知道如何让它工作,所以我可以拥有带有特殊字符的文件夹和 glob() 来正确使用它

                    $dirs = glob( FILES . '/general/q/*' );
                    foreach($dirs as &$dir)
                    {
                        $dir = bin2hex($dir);
                    }
                    dd($dirs);

globs 上面的代码,其中 Łęć 文件夹是 bin2hex,它的名称是 returns:2e2e2f706c696b692f67656e6572616c2f712fa3eae6 没有路径的文件夹名称是 a3eae6

a3eae6 是为“Łęć”返回的未知编码字符串的十六进制表示。 glob()返回的字符串可以在PHP-Notation中写成“\xa3\xea\xe6”。将这个编码为我们未知的字符串转换为 UTF-8 必须得到“Łęć”。

通过反复试验,我发现“ISO-8859-2”编码满足这个条件:

$strCode = "\xa3\xea\xe6";
$name = mb_convert_encoding($strCode,"UTF-8","ISO-8859-2");
var_dump($name === "Łęć"); //bool(true)

globreturns的字符串必须全部用mb_convert_encoding转换:

$fullNameUTF8 = mb_convert_encoding($strFromGlob,"UTF-8","ISO-8859-2");

这个程序不确定。最好知道您正在访问的文件系统使用的确切编码。