Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-读取非拉丁字符目录/文件名_Php_File_Encoding_Utf 8_Filenames - Fatal编程技术网

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方面帮助我!