php正则迭代器/递归迭代器-can';用重音符号搜索文件

php正则迭代器/递归迭代器-can';用重音符号搜索文件,php,file,search,utf-8,iterator,Php,File,Search,Utf 8,Iterator,我有一个脚本,它将在我的服务器的所有目录中搜索一个文件,然后返回该文件的完整路径。搜索查询以base64编码 在没有重音符号的情况下搜索文件时,脚本可以完美地工作。但一旦我搜索带有口音的东西,它就不起作用了 以下是我的文件结构: /var/www/clients/client2/web1/web/dl/pp/6250/Ya Basta!-2002年-卢卡 Y嘉年华拉链 /var/www/clients/client2/web1/web/dl/pp/6250/La Souris Déglingue

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

在没有重音符号的情况下搜索文件时,脚本可以完美地工作。但一旦我搜索带有口音的东西,它就不起作用了

以下是我的文件结构:

/var/www/clients/client2/web1/web/dl/pp/6250/Ya Basta!-2002年-卢卡 Y嘉年华拉链

/var/www/clients/client2/web1/web/dl/pp/6250/La Souris Déglingueé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";
}
标题(“内容类型:text/html;字符集=utf-8”);
//$encodedquery=“wwegqmfzdgehic0gmjawmiatex1y2hhifkgrmllc3rhlnppca=”;//不带重音的查询=有效!
$encodedquery=“tgegu291cmlzietpz2xpbmd16wuglsaxotg4ic0guxvhcrnrpzxigtglicmuuemlw”//query with accents=无效
$decode=utf8\u编码(base64\u解码($encodedquery);
$search=preg_quote($decode);
回声“搜索\“$search\”…”;
函数rsearch($folder,$pattern){
$dir=新的递归目录迭代器($folder);
$ite=新的递归迭代器($dir);
$files=newregexiterator($ite、$pattern、RegexIterator::GET_MATCH);
$fileList=array();
foreach($files作为$file){
$fileList=array\u merge($fileList,$file);
}
返回$fileList;
}
$root=$\u服务器['DOCUMENT\u root'];
$resultatss=rsearch($root,'/.\/'.$search.'/');
foreach($resultss作为$resultat){
echo“
找到的文件=$resultat”; }
这可能与编码有关。你确定所有内容都是UTF-8吗?为什么要对查询字符串进行utf8编码?你知道文件系统也在使用UTF-8吗?php页面有utf8标题,如果我对查询进行base64\u解码,然后utf8\u编码并回显结果,重音就没有问题了。问题是:为什么需要这样做utf8_编码它?如果你的前端是utf-8,base64中的值也应该是它。而且文件系统仍然存在问题。如果不是utf-8,那么RegexIterator将找不到任何东西。顺便问一下:你是否将utf-8修饰符添加到regex中?