PHP7GLOB忽略名称中带有重音字符的文件

PHP7GLOB忽略名称中带有重音字符的文件,php,file,non-ascii-characters,Php,File,Non Ascii Characters,我需要处理名称中带有重音字符的文件。不幸的是,GLOB似乎忽略了这些文件。我为演示创建了以下简短代码: $files = glob(dirname(__FILE__) . "/data/tracks/167/*.*"); foreach($files as $file) { var_dump($file); var_dump(file_exists($file)); } 输出为: D:\data\zdroje\Kombinovane\MotoQuest\

我需要处理名称中带有重音字符的文件。不幸的是,GLOB似乎忽略了这些文件。我为演示创建了以下简短代码:

$files = glob(dirname(__FILE__) .  "/data/tracks/167/*.*");

foreach($files as $file) {
    var_dump($file);
    var_dump(file_exists($file));
}
输出为:

D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:13:string 'D:\data\zdroje\Kombinovane\MotoQuest\Web\admin/data/tracks/167/162_P1030721 (kopie).jpg' (length=87)
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:14:boolean true
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:13:string 'D:\data\zdroje\Kombinovane\MotoQuest\Web\admin/data/tracks/167/162_tn_P1030721 (kopie).jpg' (length=90)
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:14:boolean true
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:13:string 'D:\data\zdroje\Kombinovane\MotoQuest\Web\admin/data/tracks/167/1_1493222210_P1030721.jpg' (length=88)
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:14:boolean true
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:13:string 'D:\data\zdroje\Kombinovane\MotoQuest\Web\admin/data/tracks/167/1_1493222210_tn_P1030721.jpg' (length=91)
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:14:boolean true
我的目录包含6个文件-忽略带重音字符的2个文件:

文件_存在时也是如此,即使我使用此处列出的提示-

其中一个文件名是:

1_1 493385948_tn_22-Ještěd21.jpeg


有什么想法吗?有什么问题吗?

抱歉,没有足够的代表发表评论。 你能告诉我你从中得到了什么吗:

var_dump( iconv_get_encoding() );
那么:

$files = scandir( dirname(__FILE__) . "/data/tracks/167/" );
var_dump( $files );
你可以使用:

<?php
$files = array_filter( 
    scandir( dirname(__FILE__) ), function( $file_or_folder ) {
        return !is_dir( dirname(__FILE__) . $file_or_folder );
    }
);
var_dump( $files );
?>


代替glob?

道歉,没有足够的代表发表评论。 你能告诉我你从中得到了什么吗:

var_dump( iconv_get_encoding() );
那么:

$files = scandir( dirname(__FILE__) . "/data/tracks/167/" );
var_dump( $files );
你可以使用:

<?php
$files = array_filter( 
    scandir( dirname(__FILE__) ), function( $file_or_folder ) {
        return !is_dir( dirname(__FILE__) . $file_or_folder );
    }
);
var_dump( $files );
?>


代替glob?

您是否可以将该文件名复制到描述中,我第一次尝试获取相同行为失败(我使用了str twô,这起作用)您是否可以将该文件名复制到描述中,我第一次尝试获取相同行为失败(我使用了str twô,这起作用)我获取:array(size=3)'输入编码'=>字符串'UTF-8'(长度=5)'输出编码'=>字符串'UTF-8'(长度=5)'内部编码'=>字符串'UTF-8'(长度=5),这也是我得到的,所以不是编码问题。。。请注意,扩展名JPEG与JPG对于重音文件名也是不同的。。。顺便说一句,你的代码可以在我的系统上运行。对于GLOB命令,应该没有区别-。我刚刚将JPEG重命名为JPG,结果是一样的。。。。可能它与操作系统代码页有关——我使用的是Windows 10 64位代码页1250。另一方面,这对PHP不重要,看起来文件名就是CP1250。另一方面,这并不能解释为什么glob找不到它们。输出为数组(size=8)0=>string'.'(length=1)1=>string'..'(length=2)2=>string'162_P1030721(kopie).jpg'(length=24)3=>string'162_tn_P1030721(kopie).jpg'(length=27)4=>string'1_149322210_P1030721.jpg'(length=25)5=>string'11493222210_tn_P1030721.jpg'(length=28)6=>string'1㩔�te�d21.jpg'(长度=30)7=>字符串“1”�te�d21.jpg'(长度=33)文件在那里,你需要glob regex功能吗?我得到:数组(大小=3)'input_encoding'=>string'UTF-8'(长度=5)'output_encoding'=>string'UTF-8'(长度=5)=>internal_encoding'=>string'UTF-8'(长度=5),这也是我得到的,所以不是编码问题。。。请注意,扩展名JPEG与JPG对于重音文件名也是不同的。。。顺便说一句,你的代码可以在我的系统上运行。对于GLOB命令,应该没有区别-。我刚刚将JPEG重命名为JPG,结果是一样的。。。。可能它与操作系统代码页有关——我使用的是Windows 10 64位代码页1250。另一方面,这对PHP不重要,看起来文件名就是CP1250。另一方面,这并不能解释为什么glob找不到它们。输出为数组(size=8)0=>string'.'(length=1)1=>string'..'(length=2)2=>string'162_P1030721(kopie).jpg'(length=24)3=>string'162_tn_P1030721(kopie).jpg'(length=27)4=>string'1_149322210_P1030721.jpg'(length=25)5=>string'11493222210_tn_P1030721.jpg'(length=28)6=>string'1㩔�te�d21.jpg'(长度=30)7=>字符串“1”�te�d21.jpg'(长度=33)文件就在那里,您需要glob regex功能吗?