PHP-读取非拉丁字符目录/文件名
我有一些文件和目录(在PHP-读取非拉丁字符目录/文件名,php,file,encoding,utf-8,filenames,Php,File,Encoding,Utf 8,Filenames,我有一些文件和目录(在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_co
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>';
我能怎么办
另外,我最终要实现的是,我需要比较两个目录,当我读取一个目录的内容时,我无法将其与另一个目录进行比较,因为目录/文件名已损坏-我的脚本得到name
01-显然,在第二个(比较)目录中找不到这样的子目录。事实上,我以前的答案是不对的。问题是PHP5不支持文件操作的UTF-8
一种解决方法是使用类似的东西,它公开了自己的文件流协议,并允许PHP在文件操作中处理UTF-8字符。您可以在自述文件中看到,语法如下:
scandir("wfio://directory")
祝你好运 事实上,我以前的回答是不对的。问题是PHP5不支持文件操作的UTF-8
一种解决方法是使用类似的东西,它公开了自己的文件流协议,并允许PHP在文件操作中处理UTF-8字符。您可以在自述文件中看到,语法如下:
scandir("wfio://directory")
祝你好运 感谢您的回答,但不幸的是,它没有帮助-与上述结果相同:(我刚刚提供了一个更新。这可能不是你想要的答案。这正是我目前需要的,所以谢谢你!顺便说一句,我在linux VM中尝试过,它就是这样工作的-不需要额外的库。再次非常感谢你帮助我使用Windows!谢谢你的答案,但不幸的是它没有帮助-同样的结果如上所述:(我刚刚提供了一个更新。这可能不是你想要的答案。这正是我目前需要的,所以谢谢你!顺便说一句,我在linux虚拟机中尝试过,它的工作原理就是这样-不需要额外的库。再次非常感谢你在Windows方面帮助我!