У меня нет сейчас окна Windows с PHP для тестирования, но я думаю, что ваша проблема, скорее всего, в том, что кодировка имени в Windows обычно имеет формат UTF-16 .Undex Linux, используя файловую систему ext3, я создал указанное вами имя файла, затем написал следующий PHP-файл (закодированный в UTF-8):
<?php
$filename = "板í野友美иðйüö+ψ漢語简رבֵּיبي.mp3";
$fh = fopen($filename, 'r');
$contents = fread($fh, filesize($filename));
print $contents;
var_dump($filename);
fclose($fh);
function encode_filename($fname) {
$replaced_filename =
preg_replace_callback(
'/[^\x20-\x7F]/',
create_function(
'$matches',
'return "\x" . dechex(ord($matches[0]));'
),
$fname
);
return $replaced_filename;
}
print "Encoded UTF-8 filename: " . encode_filename($filename) . "\n";
$filename = mb_convert_encoding($filename, "UTF-8", "UTF-16");
print "Encoded UTF-16 filename: " . encode_filename($filename) . "\n";
?>
Он успешно прочитал мой целевой файл и вывел его содержимое.
Вывод для закодированных имен файлов был:
Encoded UTF-8 filename: \xe6\x9d\xbf\xc3\xad\xe9\x87\x8e\xe5\x8f\x8b\xe7\xbe\x8e\xd0\xb8\xc3\xb0\xd0\xb9\xc3\xbc\xc3\xb6+\xcf\x88\xe6\xbc\xa2\xe8\xaa\x9e\xe7\xae\x80\xd8\xb1\xd7\x91\xd6\xb5\xd6\xbc\xd7\x99\xd8\xa8\xd9\x8a.mp3
Encoded UTF-16 filename: \xee\x9a\x9d\xeb\xbf\x83\xea\xb7\xa9\xe8\x9e\x8e\xee\x96\x8f\xe8\xaf\xa7\xeb\xba\x8e\xed\x82\xb8\xec\x8e\xb0\xed\x82\xb9\xec\x8e\xbc\xec\x8e\xb6\xe2\xaf\x8f\xe8\xa3\xa6\xeb\xb2\xa2\xee\xa2\xaa\xe9\xbb\xa7\xea\xba\x80\xed\x9e\x91\xed\x9a\xb5\xed\x9a\xbc\xed\x9e\x99\xe2\xb9\xad\xe7\x80\xb3
Это соответствует вашей кодировке UTF-8, так что это кажется правильным.Попробуйте кодировку UTF-16.Или сделайте, как я, и вставьте имя файла прямо в файл и закодируйте файл в UTF-16.