ファイル名の例を次に示します。
漢語.jpg (Chinese)
Федерация.jpg (Russian)
AbÇöişÜĞ.jpg (Turkish, ISO-8859-9)
...
試してみましたが、うまくいきrawurlencode(mb_convert_encoding($file, "UTF-8", mb_detect_encoding($file)))
ません。中国語とロシア語の文字はすべて %3F (通常の疑問符) として出力され、トルコ語の文字はすべて削除されます。
Windows、PHP 5.3でテストしています。
私が見つけた唯一の解決策は、エンコーディングを明示的に入力することです。rawurlencode(mb_convert_encoding($file, "UTF-8", "ISO-8859-9"))
これはトルコ語の文字に対してのみ機能します。
ちなみに、mb_detect_encoding($file)
上記のファイルに対しては常に「UTF-8」を返します。
編集:
次のコードを実行した後mb_convert_encoding()
、問題を解決できないと思います:
$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);
}
これはエンコーディングに関するものだと思いますが、どうすればよいかわかりません。