php RegexIterator / Recursive Iterator - 无法使用重音搜索文件

时间:2013-07-27 23:51:25

标签: php file search utf-8 iterator

我有一个脚本,它将在我的服务器的所有目录中搜索一个文件,然后返回该文件的完整路径。搜索查询以base64编码。

在搜索没有重音符号的文件时,脚本可以正常工作。但是一旦我搜索带有重音的东西,它就行不通。

这是我的文件结构:

  

/ var / www / clients / client2 / web1 / web / dl / pp / 6250 / Ya Basta! - 2002年 - Lucha   Y Fiesta.zip

     

/ var / www / clients / client2 / web1 / web / dl / pp / 6250 / LaSourisDéglinguée - 1988 - Quartier Libre.zip

搜索第一个文件(WWEgQmFzdGEhIC0gMjAwMiAtIEx1Y2hhIFkgRmllc3RhLnppcA==)时,它将返回正确的路径。

但是当搜索带有重音符(TGEgU291cmlzIETpZ2xpbmd16WUgLSAxOTg4IC0gUXVhcnRpZXIgTGlicmUuemlw)的第二个文件时,即使该文件存在,它也不会返回任何结果。

这是脚本:

header("Content-type: text/html; charset=utf-8");

// $encodedquery = "WWEgQmFzdGEhIC0gMjAwMiAtIEx1Y2hhIFkgRmllc3RhLnppcA==";  // query without accent = WORKS !
$encodedquery = "TGEgU291cmlzIETpZ2xpbmd16WUgLSAxOTg4IC0gUXVhcnRpZXIgTGlicmUuemlw" // query with accents = DOESNT WORKS

$decode = utf8_encode(base64_decode($encodedquery);
$search = preg_quote($decode);
echo "searching for \"$search\" ....";

        function rsearch($folder, $pattern) {
            $dir = new RecursiveDirectoryIterator($folder);
            $ite = new RecursiveIteratorIterator($dir);
            $files = new RegexIterator($ite, $pattern, RegexIterator::GET_MATCH);
            $fileList = array();
            foreach($files as $file) {
                $fileList = array_merge($fileList, $file);
            }
            return $fileList;
        }

        $root = $_SERVER['DOCUMENT_ROOT'];
        $resultatss = rsearch($root, '/.*\/'.$search.'/');

foreach ($resultatss as $resultat) {
echo "<br>FOUND FILE = $resultat";
}

0 个答案:

没有答案