PHP - 读取非拉丁字符目录/文件名



我有一些文件和目录(在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=

我能做些什么呢?

附言我最终要实现的目标,我需要比较两个目录,当我在一个目录的 reed 内容时,我无法将其与另一个目录进行比较,因为目录/文件名已损坏 - 我的脚本获得名称01 - ???????? - X,显然无法在第二个(比较)目录中找到这样的子目录。

其实我之前的回答是不对的。问题是 PHP5 不支持 UTF-8 进行文件操作。

解决方法是使用类似 WFIO 的东西,它公开了它自己的文件流协议,并允许 PHP 在文件操作中处理 UTF-8 字符。您可以在自述文件中看到语法为:

scandir("wfio://directory")

祝你好运!

相关内容

  • 没有找到相关文章

最新更新