我有一些文件和目录(在Windows
上,但最终我将在Mac和Linux上运行相同的脚本),名称中包含非拉丁字符,例如:
目录名01 - Проверка - X
。
我正在尝试阅读该名称并打印但未成功 - 我总是得到01 - ???????? - X
。
我尝试了什么:
$items = scandir('c:/myDir/');
$name = $items[2];
echo mb_detect_encoding($name); // Returns "ASCII"
echo '<br>';
echo $n = mb_convert_encoding($name, 'UTF-8', 'Windows-1252');
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = mb_convert_encoding($name, 'UTF-8', 'ISO-8859-1');
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = mb_convert_encoding($name, 'UTF-8', 'ISO-8859-15');
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = mb_convert_encoding($name, 'Windows-1252', 'UTF-8');
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = mb_convert_encoding($name, 'ISO-8859-1', 'UTF-8');
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = mb_convert_encoding($name, 'ISO-8859-15', 'UTF-8');
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = iconv('WINDOWS-1252', 'UTF-8', $name);
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = iconv('ISO-8859-1', 'UTF-8', $name);
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = iconv('ISO-8859-15', 'UTF-8', $name);
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = iconv('UTF-8', 'WINDOWS-1252', $name);
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = iconv('UTF-8', 'ISO-8859-1', $name);
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
echo $n = iconv('UTF-8', 'ISO-8859-15', $name);
echo '<br>';
echo base64_encode($n);
echo '<br><br>';
在结果中我总是有相同的行(我用base64编码,你可以看到它是同一行)
ASCII
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
01 - ???????? - X
MDEgLSA/Pz8/Pz8/PyAtIFg=
我该怎么办?
P.S。我最终想要实现的目标,我需要比较两个目录,当我reed一个目录的内容时,我无法将它与另一个目录进行比较,因为目录/文件名被破坏 - 我的脚本名称为01 - ???????? - X
,显然不能在第二个(比较)目录中找到这样的子目录。
答案 0 :(得分:2)
其实我以前的答案不对。问题是PHP5不支持UTF-8进行文件操作。
解决方法是使用像WFIO这样的东西,它公开了它自己的文件流协议,并允许PHP在文件操作中处理UTF-8字符。您可以在README中看到语法是:
scandir("wfio://directory")
祝你好运!