Aquí es algunos ejemplos de nombres de archivo:Cómo codificar nombres de archivos multibyte en PHP y decodificarlos en javascript?
漢語.jpg (Chinese)
Федерация.jpg (Russian)
AbÇöişÜĞ.jpg (Turkish, ISO-8859-9)
...
He tratado rawurlencode(mb_convert_encoding($file, "UTF-8", mb_detect_encoding($file)))
pero esto no está funcionando, todos los caracteres chinos y rusos impresos como% 3F (signo de interrogación) y regular de todos los caracteres turcos se retiran.
Estoy haciendo pruebas en Windows, PHP 5.3.
La única solución que encontré es ingresar la codificación explícitamente: rawurlencode(mb_convert_encoding($file, "UTF-8", "ISO-8859-9"))
Esto funciona solo para caracteres turcos. Por favor, mb_detect_encoding($file)
siempre devuelve "UTF-8" para los archivos anteriores.
EDIT:
Después me encontré el siguiente código creo mb_convert_encoding()
canto solucionamos mi problema:
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("mp", FilesystemIterator::UNIX_PATHS));
$iterator = new RegexIterator($iterator, '/^.+\.(gif|jpg|jpeg|png)$/i', RegexIterator::GET_MATCH);
foreach ($iterator as $file)
{
foreach (mb_list_encodings() as $encoding)
var_dump(rawurlencode(mb_convert_encoding($file[0], "UTF-8", $encoding)) . " : " . $encoding);
}
supongo que esto es algo acerca de la codificación, pero no sé cómo hacerlo.
mb_detect_encoding() no es omnisciente y se producirá un error con frecuencia, simplemente porque es casi imposible saber con certeza lo que codifica un fragmento de texto utiliza. –