我有一个脚本,它将在我的服务器的所有目录中搜索文件,然后返回文件的完整路径。搜索查询以 base64 编码。
该脚本在搜索没有重音符号的文件时完美运行。但是,一旦我搜索带有口音的东西,它就不起作用了。
这是我的文件结构:
/var/www/clients/client2/web1/web/dl/pp/6250/雅巴斯塔!- 2002 - Lucha Y Fiesta.zip
/var/www/clients/client2/web1/web/dl/pp/6250/La Souris Dé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";
}